1. 程式人生 > 程式設計 >PHP函式用法詳解【初始化、巢狀、內建函式等】

PHP函式用法詳解【初始化、巢狀、內建函式等】

本文例項講述了PHP函式用法。分享給大家供大家參考,具體如下:

初始函式

  • 函式:封裝一段用於完成特定功能的程式碼。

  • 通俗理解函式:可以完成魔鬼工作的程式碼塊,就像積木一樣,可以反覆使用,在使用的時候,拿來即用。

  • 函式定義:1)內建函式(字串操作函式、陣列操作函式)2)自定義函式

函式的基本語法格式

	function 函式名([引數1.引數2,......]){
		函式體......
	}
  • 函式的定義由一下四部分組成:
    • 關鍵字function
      function: 在宣告函式時必須使用的關鍵字;
    • 函式名functionName
      函式名: 要符合PHP的識別符號,且函式名是唯一的,不區分大小寫
    • 引數
      [引數1,引數2…]: 在外界傳遞給函式的值,他是可選的,多個引數之間使用逗號“,”分隔。
    • 函式體
      函式體: 函式定義的主體,專門用於實現特定的程式碼段。
      返回值: 需要使用return關鍵字將需要返回的資料傳遞給呼叫者。

引數設定

對於函式來說,引數的不同設定,決定了其呼叫和使用方式

  • 無參函式

    在這裡插入圖片描述


  • 按值傳遞引數
    在這裡插入圖片描述
    PHP預設支援按值傳遞引數,按此種方式定義的函式,在函式內部可以睡衣對使用者傳遞的引數進行操作。


  • 引用傳參
    在這裡插入圖片描述 在開發中,若需要函式修改它的引數值,則需要通過函式的引用傳遞。實現方式只需要在引數中前新增“&”符號即可。


  • 設定引數預設值
    在這裡插入圖片描述
    函式引數在設定時,還可以為其指定預設值,也就是可選引數。當呼叫者未傳遞該引數時,函式將使用預設值進行操作。
    當使用預設引數時,預設引數必須放在非預設引數的右側,否則函式可能出錯。
  • 指定引數型別(弱)
    在這裡插入圖片描述
    在PHP 7.0及以上的版本後,在自定義函式時,可以指定引數具體時那種資料型別
    當用戶呼叫函式時,如果傳遞引數不是int型別。程式傳遞的引數不是int型別,程式會將其強制的轉換為int型後,在進行操作,這種方式稱為弱型別引數設定。
  • 指定引數型別(強)
    在這裡插入圖片描述
    除此之外,還可以將其設定為強型別的引數,即當用戶傳遞的型別不符合函式的定義,程式會報錯提醒。

變數的作用域

變數在定義後,預設情況下,可以在函式中使用,函式外不可以。

  • 變數只有在其作用範圍內才可以被使用,這個作用範圍稱為變數的作用域。
  • 在函式中定義的變數稱為區域性變數
  • 在函式外定義的變數稱為全域性變數
function test (){
		$sum = 36; //區域性變數
		return $sum;
}
$sum = 0;	//全域性變數
echo text();	//輸出結果:36
echo $sum;	//輸出結構:0

那麼如何在函式中使用全域性變數呢?
答:引數傳遞,global關鍵字和超全域性變數$GLOBALS。

$snap = 'nihao';
function abc(){
 global $snap;//全域性變數的關鍵詞,通常加在變數前。引用全域性變數
 return $GLOBALS['snap'];//引用外部變數。定義全域性變數
}
echo abc();

函式的巢狀呼叫

巢狀呼叫

函式的巢狀呼叫: 指的是在呼叫一個函式的過程中,呼叫另外一個函式,這種在函式內呼叫其它函式的方式稱為巢狀呼叫。

遞迴呼叫

遞迴呼叫: 是函式巢狀呼叫中一種特殊的呼叫。它指的是一個函式在其函式體內呼叫自身的過程,這種函式成為遞迴函式

函式的高階應用

1. 靜態變數

輕鬆得到函式被訪問的次數,一是在函式中使用全域性變數記錄,缺點是全域性變數可隨時子啊函式外被改變,不能準確的記錄;二是在函式中使用靜態變數。
在這裡插入圖片描述

變數的作用域

  • 區域性變數: 在函式的內部定義的變數,其作用域是所在函式
  • 全域性變數: 被定義在所有函式以外的變數,其作用域是整個PHP檔案,但在使用者自定義函式內部是不可用的。如果希望在使用者自定義函式內部使用全域性變數。則要使用global關鍵字宣告
  • 靜態變數: 能夠在函式呼叫結束後仍保留變數值,當再次回到其作用域時,又可以繼續使用原來的值,而一般變數在函式呼叫結束後,其儲存的資料值將被清除,所佔的記憶體空間被釋放。使用靜態變數時,先要用static來宣告變數,把關鍵字static放在要定義的變數之前。

2.可變函式

可變函式: 可變變數,他的實現是在一個變數前新增一個“¥符號”,就變成了另外一個變數。同理,可變函式的實現就是在一個變數名後新增一對圓括號“()”,讓其變成一個函式的形式,然後PHP就尋找與變數值同名的函式,並且嘗試執行它

3.回撥函式

回撥函式: 指的就是具有callable型別的函式,一般用作引數的傳遞。如PHP內建函式call_user_func()可以接受使用者自定義的回撥函式作為引數。

4. 匿名函式

匿名函式: 就是沒有函式名稱的函式,也稱作閉包函式,經常用作回撥函式引數的值。對於臨時定義的函式,使用匿名函式無需考慮函式命名衝突的問題

php的內建函式

  • 字串函式

    字串函式是PHP用來操作字串的內建函式,在實際開發中有著非常重要的作用在這裡插入圖片描述

    • 擷取給定路徑中的字串
$url = 'C:\web\apache2.4\htdocs\cat.jpg';
$pos = strrpos($url,'\\');
// 擷取檔名稱,輸出結果:cat.jpg
echo substr($url,$pos + 1);
// 擷取檔案所在的路徑,輸出結果:C:\web\apache2.4\htdocs
echo substr($url,$pos);

strrpos()函式用於在$url中獲取“\”最後一次出現的位置$pos。
substr()函式的第1個引數表示待擷取的字串,第2個引數表示開始擷取的位置,非負數表示從字串指定位置處擷取,從0開始;負數表示從字串尾部開始。第3個引數表示擷取的長度。
substr()函式的第3個引數表示擷取的長度,該長度的設定具體有以下4種情況。
省略第3個引數時,將返回從指定位置到字串結尾的子字串。
第3個引數為正數,返回的字串將從指定位置開始,最多包含指定長度的字元,這取決於待擷取字串的長度。
第3個引數為負數,返回的字串中在結尾處將有個指定長度的字元被省略。
第3個引數為0、false或null,將返回一個空字串。
  • 替換指定位數的字元
    替換指定位數的字元,在開發也是很常見的功能。例如,在各種抽獎環節中,為了保證使用者的隱私,出現的手機號一般使用“*”將第4至7位的數字進行覆蓋
$tel = '18810881888';		 // 隨意輸入一串數字作為手機號
$len = 4; 			// 需要覆蓋的手機號長度
$replace = str_repeat('*',$len); 	// 根據指定長度設定覆蓋的字串
echo substr_replace($tel,$replace,3,$len);	// 輸出結果: 188****1888

str_repeat()函式用於對“*”字元重複len次。substrreplace()函数用于对字符串 len次。substr_replace()函数用于对字符串" role="presentation" style="position: relative;">len次。substrr​eplace()函式用於對字串tel中第3個位置開始後的len长度的字符使用 len长度的字符使用" role="presentation" style="position: relative;">len長度的字元使用replace進行替換。

  • 數字函式

    為了方便開發人員處理程式中的數學運算,PHP內建了一系列的數學函式,用於獲取最大值、最小值、生成隨機數等常見的數學運算。
    在這裡插入圖片描述
echo ceil(5.2);	// 輸出結果:6
echo floor(7.8);	// 輸出結果:7 
echo rand(1,20);	// 隨機輸出1到20間的整數

ceil()函式是對浮點數5.2進行向上取整,
floor()函式是對浮點數進行向下取整,
rand()函式的引數表示隨機數的範圍,第1個引數表示最小值,第2引數表示最大值。

  • 時間日期函式

    在使用PHP開發Web應用程式時,經常會涉及日期和時間管理。
    例如倒計時、使用者登入時間、新聞釋出時間、購買商品時下訂單的時間等。
    為此,PHP提供了內建的日期和時間處理函式,滿足開發中的各種需求。
    在這裡插入圖片描述
    Unix時間戳是一種時間的表示方式,它是為了解決程式設計環境中時間運算的問題。

    Unix時間戳(Unix timestamp): 定義了從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數,以32位二進位制數表示。

echo time();			// 輸出結果:1487666317
echo mktime(0,2,21,2017);	// 輸出結果:1487606400
echo strtotime('2017-2-21');	// 輸出結果:1487606400
echo microtime();			// 輸出結果:0.04142600 1487666098
echo microtime(true);		// 輸出結果:1487666098.0414

time()函式用於獲取當前時間的Unix時間戳,
mktime()和strtotime()函式可將給定的日期時間轉換成Unix時間戳,前者的引數分別表示“時分秒月日年”,後者可以是任意時間的字串。
函式microtime()用於獲取當前Unix時間戳和微秒數,不設定引數時,返回值的形式前面一段數字表示微妙數,後面一段數字表示秒數;設定引數時,小數點前表示秒數,小數點後表示微秒數。

格式化時間戳: 對於使用者來說,時間戳的直接輸出,會讓其看到一個毫無意義的整型數值。為了將時間戳表示的時間以友好的形式顯示出來,可以對時間戳進行格式化。

echo date('Y-m-d H:i:s');		// 輸出結果:2017-02-21 16:48:16
echo date('Y-m-d',1487666317);	// 輸出結果:2017-02-21

date()函式第1個引數表示格式化日期時間的樣式
date()函式第2個引數表示待格式化的時間戳,省略時表示格式化當前時間戳。
在這裡插入圖片描述
在這裡插入圖片描述

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php常用函式與技巧總結》、《php字串(string)用法總結》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。