PHP 魔術方法
阿新 • • 發佈:2017-06-13
log des ons 函數 私有 func 面向對象編程 自動 pan
一、php中的魔術方法
php在面向對象編程時有一些特殊的方法,會在特定的時機自動調用,我們將這類方法稱為魔術方法。
二、常見的魔術方法及功能
1.構造函數 __construct():當類被實例化為一個對象時自動調用,主要用來完成對象生成時初始化屬性。
例:
1 <?php 2 3 class App{ 4 5 public function __construct(){ 6 7 echo 1111; 8 } 9 10 } 11 12 $app=new App();//自動輸出111
2.析構函數 __destruct():當對象使用完畢,銷毀對象前會自動調用。
例:
1 <?php 2 3 class App{ 4 5 public function __construct(){ 6 7 echo 1111; 8 } 9 10 public function __destruct(){ 11 12 echo 2222; 13 } 14 $app=new App();//先輸出111,在輸出222
3.__isset($name):在外部檢測類中某屬性是否存在時,如果該屬性為私有屬性或未定義屬性,就會自動觸發__isset($name)方法。
例
<?php class App{ private $name=‘jack‘; public function __isset($name){ //$name為外部查詢的屬性名 if(isset($this->$name)){ echo‘ 請求不合法,你查詢的是私有屬性‘; }else{echo ‘未定義的屬性‘; } } } $app=new App(); isset($app->name); //結果:請求不合法,你查詢的是私有屬性; isset($app->age); //結果:未定義的屬性
4.__unset() 在外部刪除類中屬性時,如果該屬性為類的私有屬性或該屬性未定義時,自動觸發__unset方法。
例:
<?php class App{ private $name=‘jack‘; public function __unset($name){ //$name為外部要刪除的屬性名 if(isset($this->$name)){ echo‘ 請求不合法,你刪除的是私有屬性‘; }else{ echo ‘未定義的屬性‘; } } } $app=new App(); unset($app->name); //結果:請求不合法,你刪除的是私有屬性; unset($app->age); //結果:未定義的屬性
5. __set($name,$value):當在外部給類中的屬性賦值時,如果該屬性未定義,則會觸發__set($name,$value)。
例
<?php class App{ public function __set($name){ //$name為外部要賦值的屬性名 echo 2222; } } $app=new App(); $app->name=‘jack‘; //結果:2222
6.__get($name):當在外部調用類的屬性時,如果該屬性未定義,則會觸發__get($name)方法。
例
<?php class App{ public $name=‘jack‘; public function __get($name){ //$name為外部要調用的屬性名 echo 333; } } $app=new App(); echo $app->name;//輸出 jack; echo $app->age ;//結果:333;
7.__call($name):當在外部調用類中的方法時,如果該方法未定義,則會觸發__call($name)方法。
例
<?php class App{ public function run(){ echo ‘去旅遊‘; } public function __call($name){ //$name為外部要調用的方法名 echo 333; } } $app=new App(); echo $app->run();//輸出 去旅遊; echo $app->play() ;//結果:333;
8. __autoload($name):一般用來自動加載類,如果類的命名規範,且要引用的類比較多,或防止忘記引用時,可以使用自動加載功能。
例
<?php function __autoload($name){ include $name.‘class.php‘; } $app=new App();//會自動加載當前目錄下的App.class.php
PHP 魔術方法