您好,登錄后才能下訂單哦!
這篇文章主要講解了“php中的__callStatic函數怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“php中的__callStatic函數怎么用”吧!
這種情況在larave中尤其常見,但是開發過程中很明顯這些有一部分不是靜態的,比如你使用一個模型User,那么你每次實例化出來他都是一個全新的,互不影響,這里就用到了一個魔術方法__callStatic。
舉個栗子:
<?php class Test{ public function __call($name, $arguments) { echo 'this is __call'. PHP_EOL; } public static function __callStatic($name, $arguments) { echo 'this is __callStatic:'. PHP_EOL; } } $test = new Test(); $test->hello(); $test::hi(); //this is __call:hello //this is __callStatic:hi
當然魔術方法也是很耗性能的一種方式,每次調用的時候后回先掃一遍class沒找到方法時才會調用它,而為了代碼的整潔和抽象這個方法也能給很大的幫助,在這之間去要有個權衡
下面實現的 log 類,采用的就是這種方法,將方法解耦出來,只要符合規定的接口就能調用
<?php class Test{ //獲取 logger 的實體 private static $logger; public static function getLogger(){ return self::$logger?: self::$logger = self::createLogger(); } private static function createLogger(){ return new Logger(); } public static function setLogger(LoggerInterface $logger){ self::$logger = $logger; } public function __call($name, $arguments) { call_user_func_array([self::getLogger(),$name],$arguments); } public static function __callStatic($name, $arguments) { forward_static_call_array([self::getLogger(),$name],$arguments); } } interface LoggerInterface{ function info($message,array $content = []); function alert($messge,array $content = []); } class Logger implements LoggerInterface { function info($message, array $content = []) { echo 'this is Log method info' . PHP_EOL; var_dump($content); } function alert($messge, array $content = []) { echo 'this is Log method alert: '. $messge . PHP_EOL; } } Test::info('喊個口號:',['好好','學習','天天','向上']); $test = new Test(); $test->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
感謝各位的閱讀,以上就是“php中的__callStatic函數怎么用”的內容了,經過本文的學習后,相信大家對php中的__callStatic函數怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。