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