PHP函數(shù)用法詳解【初始化、嵌套、內(nèi)置函數(shù)等】
本文實(shí)例講述了PHP函數(shù)用法。分享給大家供大家參考,具體如下:
初始函數(shù)
-
函數(shù):封裝一段用于完成特定功能的代碼。
-
通俗理解函數(shù):可以完成魔鬼工作的代碼塊,就像積木一樣,可以反復(fù)使用,在使用的時(shí)候,拿來(lái)即用。
-
函數(shù)定義:1)內(nèi)置函數(shù)(字符串操作函數(shù)、數(shù)組操作函數(shù))2)自定義函數(shù)
函數(shù)的基本語(yǔ)法格式
function 函數(shù)名([參數(shù)1.參數(shù)2,......]){ 函數(shù)體...... }
- 函數(shù)的定義由一下四部分組成:
- 關(guān)鍵字function
function: 在聲明函數(shù)時(shí)必須使用的關(guān)鍵字; - 函數(shù)名functionName
函數(shù)名: 要符合PHP的標(biāo)識(shí)符,且函數(shù)名是唯一的,不區(qū)分大小寫(xiě) - 參數(shù)
[參數(shù)1,參數(shù)2…]: 在外界傳遞給函數(shù)的值,他是可選的,多個(gè)參數(shù)之間使用逗號(hào)“,”分隔。 - 函數(shù)體
函數(shù)體: 函數(shù)定義的主體,專門(mén)用于實(shí)現(xiàn)特定的代碼段。
返回值: 需要使用return關(guān)鍵字將需要返回的數(shù)據(jù)傳遞給調(diào)用者。
- 關(guān)鍵字function
參數(shù)設(shè)置
對(duì)于函數(shù)來(lái)說(shuō),參數(shù)的不同設(shè)置,決定了其調(diào)用和使用方式
-
無(wú)參函數(shù)
-
按值傳遞參數(shù)
PHP默認(rèn)支持按值傳遞參數(shù),按此種方式定義的函數(shù),在函數(shù)內(nèi)部可以睡衣對(duì)用戶傳遞的參數(shù)進(jìn)行操作。
-
引用傳參
在開(kāi)發(fā)中,若需要函數(shù)修改它的參數(shù)值,則需要通過(guò)函數(shù)的引用傳遞。實(shí)現(xiàn)方式只需要在參數(shù)中前添加“&”符號(hào)即可。
- 設(shè)置參數(shù)默認(rèn)值
函數(shù)參數(shù)在設(shè)置時(shí),還可以為其指定默認(rèn)值,也就是可選參數(shù)。當(dāng)調(diào)用者未傳遞該參數(shù)時(shí),函數(shù)將使用默認(rèn)值進(jìn)行操作。
當(dāng)使用默認(rèn)參數(shù)時(shí),默認(rèn)參數(shù)必須放在非默認(rèn)參數(shù)的右側(cè),否則函數(shù)可能出錯(cuò)。
- 指定參數(shù)類型(弱)
在PHP 7.0及以上的版本后,在自定義函數(shù)時(shí),可以指定參數(shù)具體時(shí)那種數(shù)據(jù)類型
當(dāng)用戶調(diào)用函數(shù)時(shí),如果傳遞參數(shù)不是int類型。程序傳遞的參數(shù)不是int類型,程序會(huì)將其強(qiáng)制的轉(zhuǎn)換為int型后,在進(jìn)行操作,這種方式稱為弱類型參數(shù)設(shè)置。
- 指定參數(shù)類型(強(qiáng))
除此之外,還可以將其設(shè)置為強(qiáng)類型的參數(shù),即當(dāng)用戶傳遞的類型不符合函數(shù)的定義,程序會(huì)報(bào)錯(cuò)提醒。
變量的作用域
變量在定義后,默認(rèn)情況下,可以在函數(shù)中使用,函數(shù)外不可以。
- 變量只有在其作用范圍內(nèi)才可以被使用,這個(gè)作用范圍稱為變量的作用域。
- 在函數(shù)中定義的變量稱為局部變量
- 在函數(shù)外定義的變量稱為全局變量
function test (){ $sum = 36; //局部變量 return $sum; } $sum = 0; //全局變量 echo text(); //輸出結(jié)果:36 echo $sum; //輸出結(jié)構(gòu):0
那么如何在函數(shù)中使用全局變量呢?
答:參數(shù)傳遞,global關(guān)鍵字和超全局變量$GLOBALS。
$snap = 'nihao'; function abc(){ global $snap;//全局變量的關(guān)鍵詞,通常加在變量前。引用全局變量 return $GLOBALS['snap'];//引用外部變量。定義全局變量 } echo abc();
函數(shù)的嵌套調(diào)用
嵌套調(diào)用
函數(shù)的嵌套調(diào)用: 指的是在調(diào)用一個(gè)函數(shù)的過(guò)程中,調(diào)用另外一個(gè)函數(shù),這種在函數(shù)內(nèi)調(diào)用其它函數(shù)的方式稱為嵌套調(diào)用。
遞歸調(diào)用
遞歸調(diào)用: 是函數(shù)嵌套調(diào)用中一種特殊的調(diào)用。它指的是一個(gè)函數(shù)在其函數(shù)體內(nèi)調(diào)用自身的過(guò)程,這種函數(shù)成為遞歸函數(shù)
函數(shù)的高級(jí)應(yīng)用
1. 靜態(tài)變量
輕松得到函數(shù)被訪問(wèn)的次數(shù),一是在函數(shù)中使用全局變量記錄,缺點(diǎn)是全局變量可隨時(shí)子啊函數(shù)外被改變,不能準(zhǔn)確的記錄;二是在函數(shù)中使用靜態(tài)變量。
變量的作用域
- 局部變量: 在函數(shù)的內(nèi)部定義的變量,其作用域是所在函數(shù)
- 全局變量: 被定義在所有函數(shù)以外的變量,其作用域是整個(gè)PHP文件,但在用戶自定義函數(shù)內(nèi)部是不可用的。如果希望在用戶自定義函數(shù)內(nèi)部使用全局變量。則要使用global關(guān)鍵字聲明
- 靜態(tài)變量: 能夠在函數(shù)調(diào)用結(jié)束后仍保留變量值,當(dāng)再次回到其作用域時(shí),又可以繼續(xù)使用原來(lái)的值,而一般變量在函數(shù)調(diào)用結(jié)束后,其存儲(chǔ)的數(shù)據(jù)值將被清除,所占的內(nèi)存空間被釋放。使用靜態(tài)變量時(shí),先要用static來(lái)聲明變量,把關(guān)鍵字static放在要定義的變量之前。
2.可變函數(shù)
可變函數(shù): 可變變量,他的實(shí)現(xiàn)是在一個(gè)變量前添加一個(gè)“¥符號(hào)”,就變成了另外一個(gè)變量。同理,可變函數(shù)的實(shí)現(xiàn)就是在一個(gè)變量名后添加一對(duì)圓括號(hào)“()”,讓其變成一個(gè)函數(shù)的形式,然后PHP就尋找與變量值同名的函數(shù),并且嘗試執(zhí)行它
3.回調(diào)函數(shù)
回調(diào)函數(shù): 指的就是具有callable類型的函數(shù),一般用作參數(shù)的傳遞。如PHP內(nèi)置函數(shù)call_user_func()可以接受用戶自定義的回調(diào)函數(shù)作為參數(shù)。
4. 匿名函數(shù)
匿名函數(shù): 就是沒(méi)有函數(shù)名稱的函數(shù),也稱作閉包函數(shù),經(jīng)常用作回調(diào)函數(shù)參數(shù)的值。對(duì)于臨時(shí)定義的函數(shù),使用匿名函數(shù)無(wú)需考慮函數(shù)命名沖突的問(wèn)題
php的內(nèi)置函數(shù)
$url = 'C:\web\apache2.4\htdocs\cat.jpg'; $pos = strrpos($url, '\\'); // 截取文件名稱,輸出結(jié)果:cat.jpg echo substr($url, $pos + 1); // 截取文件所在的路徑,輸出結(jié)果:C:\web\apache2.4\htdocs echo substr($url, 0, $pos); strrpos()函數(shù)用于在$url中獲取“\”最后一次出現(xiàn)的位置$pos。 substr()函數(shù)的第1個(gè)參數(shù)表示待截取的字符串,第2個(gè)參數(shù)表示開(kāi)始截取的位置,非負(fù)數(shù)表示從字符串指定位置處截取,從0開(kāi)始;負(fù)數(shù)表示從字符串尾部開(kāi)始。第3個(gè)參數(shù)表示截取的長(zhǎng)度。 substr()函數(shù)的第3個(gè)參數(shù)表示截取的長(zhǎng)度,該長(zhǎng)度的設(shè)置具體有以下4種情況。 省略第3個(gè)參數(shù)時(shí),將返回從指定位置到字符串結(jié)尾的子字符串。 第3個(gè)參數(shù)為正數(shù),返回的字符串將從指定位置開(kāi)始,最多包含指定長(zhǎng)度的字符,這取決于待截取字符串的長(zhǎng)度。 第3個(gè)參數(shù)為負(fù)數(shù),返回的字符串中在結(jié)尾處將有個(gè)指定長(zhǎng)度的字符被省略。 第3個(gè)參數(shù)為0、false或null,將返回一個(gè)空字符串。
- 替換指定位數(shù)的字符
替換指定位數(shù)的字符,在開(kāi)發(fā)也是很常見(jiàn)的功能。例如,在各種抽獎(jiǎng)環(huán)節(jié)中,為了保證用戶的隱私,出現(xiàn)的手機(jī)號(hào)一般使用“*”將第4至7位的數(shù)字進(jìn)行覆蓋
$tel = '18810881888'; // 隨意輸入一串?dāng)?shù)字作為手機(jī)號(hào) $len = 4; // 需要覆蓋的手機(jī)號(hào)長(zhǎng)度 $replace = str_repeat('*', $len); // 根據(jù)指定長(zhǎng)度設(shè)置覆蓋的字符串 echo substr_replace($tel, $replace, 3, $len); // 輸出結(jié)果: 188****1888
str_repeat()函數(shù)用于對(duì)“*”字符重復(fù)
-
數(shù)字函數(shù)
為了方便開(kāi)發(fā)人員處理程序中的數(shù)學(xué)運(yùn)算,PHP內(nèi)置了一系列的數(shù)學(xué)函數(shù),用于獲取最大值、最小值、生成隨機(jī)數(shù)等常見(jiàn)的數(shù)學(xué)運(yùn)算。
echo ceil(5.2); // 輸出結(jié)果:6 echo floor(7.8); // 輸出結(jié)果:7 echo rand(1, 20); // 隨機(jī)輸出1到20間的整數(shù)
ceil()函數(shù)是對(duì)浮點(diǎn)數(shù)5.2進(jìn)行向上取整,
floor()函數(shù)是對(duì)浮點(diǎn)數(shù)進(jìn)行向下取整,
rand()函數(shù)的參數(shù)表示隨機(jī)數(shù)的范圍,第1個(gè)參數(shù)表示最小值,第2參數(shù)表示最大值。
-
時(shí)間日期函數(shù)
在使用PHP開(kāi)發(fā)Web應(yīng)用程序時(shí),經(jīng)常會(huì)涉及日期和時(shí)間管理。
例如倒計(jì)時(shí)、用戶登錄時(shí)間、新聞發(fā)布時(shí)間、購(gòu)買(mǎi)商品時(shí)下訂單的時(shí)間等。
為此,PHP提供了內(nèi)置的日期和時(shí)間處理函數(shù),滿足開(kāi)發(fā)中的各種需求。
Unix時(shí)間戳是一種時(shí)間的表示方式,它是為了解決編程環(huán)境中時(shí)間運(yùn)算的問(wèn)題。Unix時(shí)間戳(Unix timestamp): 定義了從格林威治時(shí)間1970年01月01日00時(shí)00分00秒起至現(xiàn)在的總秒數(shù),以32位二進(jìn)制數(shù)表示。
echo time(); // 輸出結(jié)果:1487666317 echo mktime(0, 0, 0, 2, 21, 2017); // 輸出結(jié)果:1487606400 echo strtotime('2017-2-21'); // 輸出結(jié)果:1487606400 echo microtime(); // 輸出結(jié)果:0.04142600 1487666098 echo microtime(true); // 輸出結(jié)果:1487666098.0414
time()函數(shù)用于獲取當(dāng)前時(shí)間的Unix時(shí)間戳,
mktime()和strtotime()函數(shù)可將給定的日期時(shí)間轉(zhuǎn)換成Unix時(shí)間戳,前者的參數(shù)分別表示“時(shí)分秒月日年”,后者可以是任意時(shí)間的字符串。
函數(shù)microtime()用于獲取當(dāng)前Unix時(shí)間戳和微秒數(shù),不設(shè)置參數(shù)時(shí),返回值的形式前面一段數(shù)字表示微妙數(shù),后面一段數(shù)字表示秒數(shù);設(shè)置參數(shù)時(shí),小數(shù)點(diǎn)前表示秒數(shù),小數(shù)點(diǎn)后表示微秒數(shù)。
格式化時(shí)間戳: 對(duì)于用戶來(lái)說(shuō),時(shí)間戳的直接輸出,會(huì)讓其看到一個(gè)毫無(wú)意義的整型數(shù)值。為了將時(shí)間戳表示的時(shí)間以友好的形式顯示出來(lái),可以對(duì)時(shí)間戳進(jìn)行格式化。
echo date('Y-m-d H:i:s'); // 輸出結(jié)果:2017-02-21 16:48:16 echo date('Y-m-d', 1487666317); // 輸出結(jié)果:2017-02-21
date()函數(shù)第1個(gè)參數(shù)表示格式化日期時(shí)間的樣式
date()函數(shù)第2個(gè)參數(shù)表示待格式化的時(shí)間戳,省略時(shí)表示格式化當(dāng)前時(shí)間戳。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php常用函數(shù)與技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php mysql_list_dbs()函數(shù)用法示例
這篇文章主要介紹了php mysql_list_dbs()函數(shù)用法,簡(jiǎn)單介紹了mysql_list_dbs()函數(shù)的功能及列出mysql所有數(shù)據(jù)庫(kù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03PHP 自定義錯(cuò)誤處理函數(shù)trigger_error()
trigger_error() 用于在用戶指定的條件下觸發(fā)一個(gè)錯(cuò)誤消息。它與內(nèi)建的錯(cuò)誤處理器一同使用,也可以與由 set_error_handler() 函數(shù)創(chuàng)建的用戶自定義函數(shù)使用2013-03-03給apache2.2加上mod_encoding模塊後 php5.2.0 處理url出現(xiàn)bug
給apache2.2加上mod_encoding模塊後 php5.2.0 處理url出現(xiàn)bug...2007-04-04

php實(shí)現(xiàn)圖片文件與下載文件防盜鏈的方法

php中有關(guān)合并某一字段鍵值相同的數(shù)組合并的改進(jìn)

php中記錄用戶訪問(wèn)過(guò)的產(chǎn)品,在cookie記錄產(chǎn)品id,id取得產(chǎn)品信息

php mssql 分頁(yè)SQL語(yǔ)句優(yōu)化 持續(xù)影響