PHP几种常见魔术方法与魔术变量解析
生活随笔
收集整理的這篇文章主要介紹了
PHP几种常见魔术方法与魔术变量解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PHP幾種常見魔術(shù)方法與魔術(shù)變量解析
先不多說,直接上代碼,如下:
1 class Demo 2 { 3 private $str = 'str'; 4 5 //實(shí)例化時(shí)自動(dòng)加載function 6 public function __construct() 7 { 8 echo "start<br/>"; 9 } 10 11 //__call()用來獲取沒有定義的function 12 public function __call($name, $arguments) 13 { 14 echo $name.'_call<br>'; 15 } 16 17 //獲取私有變量 18 public function __get($name) 19 { 20 // TODO: Implement __get() method. 21 echo $this->$name.'_get<br/>'; 22 } 23 24 //通過關(guān)鍵字 clone 克隆一個(gè)對(duì)象時(shí)該對(duì)象調(diào)用__clone()方法 25 public function __clone() 26 { 27 // TODO: Implement __clone() method. 28 } 29 30 //__set()設(shè)置私有變量的值 31 public function __set($name, $value) 32 { 33 // TODO: Implement __set() method. 34 $this->$name = $value; 35 } 36 37 //————callStatic()調(diào)用沒有被定義的static靜態(tài)function 38 public static function __callStatic($name, $arguments) 39 { 40 // TODO: Implement __callStatic() method. 41 echo $name.'_classStatic'; 42 } 43 44 //刪除類對(duì)象時(shí)候自動(dòng)調(diào)用 45 public function __destruct() 46 { 47 // TODO: Implement __destruct() method. 48 echo "end"; 49 } 50 51 52 } 53 54 $class = new Demo(); 55 $class->success(); 56 $class->succ = 111; 57 echo $class->succ; 58 echo $class->str; 59 echo '<br>'; 60 $obj = clone $class; 61 print_r($obj); 62 echo '<br>'; 63 $class::end();運(yùn)行結(jié)果:
start success_call 111str_getclone Demo Object ( [str:Demo:private] => str [succ] => 111 ) end_classStatic endend
方法總結(jié):
1. __set(),__get(),__isset(),__unset()可以歸之為一類,適用于私有變量的設(shè)置、取值、判斷、刪除的操作。
2. __construct()構(gòu)造函數(shù),__desctruct()析構(gòu)函數(shù),實(shí)例化類的時(shí)候就會(huì)產(chǎn)生,有一點(diǎn)不同,構(gòu)造在最前面,
析構(gòu)函數(shù)在最后面
3. 當(dāng)調(diào)用class中沒有定義的方法時(shí),會(huì)報(bào)錯(cuò)fail error,如果class中定義了__call(),會(huì)直接調(diào)用__call()方法進(jìn)行操作。
例如:$class->success('data');類中的__call方法開始執(zhí)行把參數(shù)轉(zhuǎn)換為數(shù)組形式array([0] => 'data');
__callStatic()方法同理,只是對(duì)沒有定義的靜態(tài)方法起作用。
?
幾種常見的魔術(shù)變量:
1 namespace app; 2 3 //__LINE__ 當(dāng)前腳本行號(hào) 4 echo __LINE__.'<br/>'; 5 6 //__FILE__ 文件的完整路徑與文件名 7 echo __FILE__.'<br/>'; 8 9 //__DIR__ 文件所在目錄 10 echo __DIR__.'<br/>'; 11 12 class Test { 13 function demo(){ 14 //__FUNCTION__ 函數(shù)名稱 ,php5以后返回該函數(shù)被定義時(shí)的名字(區(qū)分大小寫) 15 echo __FUNCTION__.'<br/>'; 16 17 //__CLASS__ 類名稱,PHP 5 起本常量返回該類被定義時(shí)的名字(區(qū)分大小寫)。 18 //注意自 PHP 5.4 起 __CLASS__ 對(duì) trait 也起作用。 19 //當(dāng)用在 trait 方法中時(shí),__CLASS__ 是調(diào)用 trait 方法的類的名字。 20 echo __CLASS__.'<br/>'; 21 22 //__METHOD__ 類的方法名,返回該方法被定義時(shí)的名字(區(qū)分大小寫) 23 echo __METHOD__.'<br/>'; 24 25 26 //__NAMESPACE__ 當(dāng)前命名空間 27 echo __NAMESPACE__.'<br/>'; 28 } 29 } 30 31 (new Test())->demo(); 32 33 trait HelloWorld { 34 public function sayHello() { 35 //__TRAIT__ Trait 的名字 PHP 5.4 起此常量返回 trait 被定義時(shí)的名字(區(qū)分大小寫) 36 echo __TRAIT__.'<br/>'; 37 } 38 } 39 40 class TheWorldIsNotEnough { 41 use HelloWorld; 42 } 43 $o = new TheWorldIsNotEnough(); 44 $o->sayHello();輸出結(jié)果:
12 G:\phpstudy\PHPTutorial\WWW\phpDemo\03-08.php G:\phpstudy\PHPTutorial\WWW\phpDemo demo app\Test app\Test::demo app app\HelloWorld?
原文地址:http://small.aiweimeng.top/index.php/archives/49.html總結(jié)
以上是生活随笔為你收集整理的PHP几种常见魔术方法与魔术变量解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apache配置CA证书通过https通
- 下一篇: plot3d