1. 程式人生 > >PHP 魔術方法

PHP 魔術方法

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 魔術方法