摘要:現在很多框架中調用方法都是這種格式的但是他們真的是靜態方法嗎這種情況在中尤其常見但是開發過程中很明顯這些有一部分不是靜態的比如你使用一個模型那么你每次實例化出來他都是一個全新的互不影響這里就用到了一個魔術方法舉個栗子當然魔術方法也是很耗性
現在很多框架中調用方法都是Foo::bar()這種格式的,但是他們真的是靜態方法嗎?
這種情況在 larave 中尤其常見,但是開發過程中很明顯這些有一部分不是靜態的,比如你使用一個模型User,那么你每次實例化出來他都是一個全新的,互不影響,這里就用到了一個魔術方法__callStatic
舉個栗子:
hello(); $test::hi(); //this is __call:hello //this is __callStatic:hi
當然魔術方法也是很耗性能的一種方式,每次調用的時候后回先掃一遍class沒找到方法時才會調用它,而為了代碼的整潔和抽象這個方法也能給很大的幫助,在這之間去要有個權衡
下面實現的 log 類,采用的就是這種方法,將方法解耦出來,只要符合規定的接口就能調用
alert("hello");
輸出:
this is Log method info array(4) { [0]=> string(6) "好好" [1]=> string(6) "學習" [2]=> string(6) "天天" [3]=> string(6) "向上" } this is Log method alert: hello
也許有的小伙伴已經看出來了,沒錯!這段代碼就是仿照(抄)的 EasyWechat的日志部分,代碼片段
博客原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23103.html
摘要:魔術方法知識點整理代碼使用語法編寫一構造函數和析構函數構造函數具有構造函數的類會在每次創建新對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。在析構函數中調用將會中止其余關閉操作的運行。析構函數中拋異常會導致致命錯誤。 PHP魔術方法知識點整理 代碼使用PHP7.2語法編寫 一、構造函數和析構函數 __construct() 構造函數 __construct ([ mi...
摘要:一面向對象的概念什么是面向對象世間萬物皆對象,抽象的也是對象,一切可見或不可見都是對象對象的基本組成對象包含兩個部分對象的組成元素是對象的數據模型,用于描述對象的數據又稱為對象的屬性,或者對象的成員變量對象的行為是對象的行為模型,用于描述對 一、面向對象的概念 1.1 什么是面向對象(object oriented) ?????世間萬物皆對象,抽象的也是對象,一切可見或不可見都是對象 ...
摘要:重載在中就大量應用了重載相關知識,如在中就用到了方法重載知識使用魔術方法來動態創建類中未定義或不可見的靜態方法。中通過引入魔術方法來實現動態的創建類屬性和方法,包括屬性重載的魔術方法和方法重載的魔術方法。 說明:本文主要講述PHP中重載概念,由于Laravel框架中經常使用這塊知識點,并且PHP的重載概念又與其他OOP語言如JAVA中重載概念不一樣,故復習并記錄相關知識點。同時,作者會...
摘要:將所有以兩個下劃線開頭的類方法保留為魔術方法。和當對象被當做使用時,這個方法會被自動調用。此方法必須返回一個字符串當對象被當成方法調用時,這個方法會被自動調用。參數是一個枚舉數組,包含著要傳遞給方法的參數。函數把數組元素組合為一個字符串。 PHP 將所有以 _ _(兩個下劃線)開頭的類方法保留為魔術方法。 __toString() 和__invoke() public stri...
摘要:魔術方法構造函數允行開發者在一個類中定義一個方法作為構造函數。如果子類沒有定義構造函數則會如同一個普通的類方法一樣從父類繼承假如沒有被定義為的話。和函數會檢查類中是否存在一個魔術方法。魔術常量魔法方法 PHP - 魔術常量 __LINE__ 文件中的當前行號 __FILE__ 文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。 __DIR__ 文件所在的目錄。如果用在...
閱讀 3948·2021-09-22 10:02
閱讀 3372·2019-08-30 15:52
閱讀 3067·2019-08-30 12:51
閱讀 764·2019-08-30 11:08
閱讀 2070·2019-08-29 15:18
閱讀 3110·2019-08-29 12:13
閱讀 3601·2019-08-29 11:29
閱讀 1877·2019-08-29 11:13