php自訂函數的工作原理和結構化程式設計介紹

伊谢尔伦
發布: 2023-03-07 18:18:01
原創
2295 人瀏覽過

當且僅當函數被呼叫以後,函數中的程式碼語句才會被執行,其目的是為了完成一些特定的任務。而函數被執行完成以後,控制權會回到呼叫函數的地方,函數就能夠以傳回值的方式將資訊傳回給程式。透過在程式中使用函數,可以進行結構化程式設計。在結構化程式設計中,各個任務使用獨立的程式碼一段一段完成的。而函數正式實現這種 “ 獨立的程勳代碼段 ” 最理想的方式,所以函數和結構化程式設計的關係非常之密切。結構化程式設計之所以很優秀,是有其自己獨特的理由的,主要還是如下的兩個重要的原因:

 1. 結構化程序更容易被編寫,因為複雜的程式設計問題被劃分為多個更小的、更簡單的任務。每個任務由一個函數來完成,而函數中的程式碼和變數獨立於程式的其他部分。每次處理一個簡單的任務,程式設計的速度將會更加快速。

 2. 結構化程式更容易除錯。如果程式中有一些無法正確運行的程式碼,結構化設計則使得將問題縮小到特定的單碼段,例如一個特定的函數。這樣調試錯誤修改就比較方便,自上到下,從左到右,一步一步都按照順序來進行即可。

結構化程式設計的一個顯著的優點是可以節省時間。如果在一個程式中編寫執行特定任務的函數,則可以在另一個需要執行相同任務的程式中使用它。即使心程式需要王城的任務稍微不同,但修改一個現有的函數比重新寫一個函數更容易。想想看,你經常使用使用 echo() 和 var_dump() , 雖然首先應該確認程序的功能,必須做一些規劃,在規劃中必須列出程序要執行的所有具體任務。然後使用函數編寫每個特定的任務,在主程式中按執行順序呼叫每個任務函數,就組成了一個完整的結構化程式。在下圖中所示是一個包含三個函數的程序,其中每個函數都執行特定的任務,可以再在主程序中呼叫一次或多次。每當函數被呼叫時,控制權便會傳遞給函數。函數執行完畢後,控制權回到呼叫函數的位置

如下圖所示:

php自訂函數的工作原理和結構化程式設計介紹

php實作了典型的動態語言執行過程:拿到一段程式碼後,經過詞法解析、語法解析等階段後,原始程式會被翻譯成一個個指令(opcodes),然後ZEND虛擬機器順次執行這些指令完成操作。 Php本身是用c實現的,因此最終呼叫的也都是c的函數,實際上,我們可以把php看做是一個c開發的軟體。透過上面描述不難看出,php中函數的執行也是被翻譯成了opcodes來調用,每次函數調用實際上是執行了一條或多條指令。

對於每一個函數,zend都透過以下的資料結構來描述

typedef union _zend_function { 
zend_uchar type; /* MUST be the first element of this struct! */ 
struct { 
zend_uchar type; /* never used */ 
char *function_name; 
zend_class_entry *scope; 
zend_uint fn_flags; 
union _zend_function *prototype; 
zend_uint num_args; 
zend_uint required_num_args; 
zend_arg_info *arg_info; 
zend_bool pass_rest_by_reference; 
unsigned char return_reference; 
} common;

zend_op_array op_array; 
zend_internal_function internal_function; 
} zend_function;

typedef struct _zend_function_state { 
HashTable *function_symbol_table; 
zend_function *function; 
void *reserved[ZEND_MAX_RESERVED_RESOURCES]; 
} zend_function_state;
登入後複製

其中type標明了函數的類型:使用者函數、內建函數、重載函數。 Common包含函數的基本訊息,包括函數名,參數訊息,函數標誌(普通函數、靜態方法、抽象方法)等內容。另外,對於使用者函數,還有一個函數符號表,記錄了內部變數等,這個將在後面詳述。 Zend維護了一個全域function_table,這是一個大的hahs表。函數呼叫的時候會先根據函數名稱從表中找到對應的zend_function。當進行函數呼叫時候,虛擬機會根據type的不同決定呼叫方法, 不同類型的函數,其執行原理是不相同的 。

【相關教學推薦】

1. 《php.cn獨孤九賤(4)-php影片教學

2.  php程式設計從入門到精通全套影片教學

3. php實戰影片教學

#

以上是php自訂函數的工作原理和結構化程式設計介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!