標籤:函數 物件導向編程 name logs 初始化 cal 刪除 div 未定義
一、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)方法。
例
<?phpclass 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方法。
例:
<?phpclass 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)。
例
<?phpclass App{ public function __set($name){ //$name為外部要賦值的屬性名稱 echo 2222; } }$app=new App();$app->name=‘jack‘;//結果:2222
6.__get($name):當在外部調用類的屬性時,如果該屬性未定義,則會觸發__get($name)方法。
例
<?phpclass 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)方法。
例
<?phpclass 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):一般用來自動載入類,如果類的命名規範,且要引用的類比較多,或防止忘記引用時,可以使用自動載入功能。
例
<?phpfunction __autoload($name){ include $name.‘class.php‘; }$app=new App();//會自動載入目前的目錄下的App.class.php
PHP 魔術方法