1. 程式人生 > >php中的魔術方法應用例項

php中的魔術方法應用例項

<?php  


 //獲取當前類名
 echo  __CLASS__  ; 
 //當前函式名(confirm
 echo  __FUNCTION__ ;
 //當前方法名 (bankcard::confirm)
  echo __METHOD__ ;

//在PHP5中,預定義了兩個函式“__get()”和“__set()”來獲取和賦值其屬性,__get()方法:這個方法用來獲取私有成員屬性值的,有一個引數,引數傳入你要獲取的成員屬性的名稱,
//返回獲取的屬性值

class People{
private  $name; //人的名子 
private $sex; //人的性別 
//__get()方法用來獲取私有屬性 

function __get($propetyName){

echo 'get property' ; 
}


/**__set()方法:這個方法用來為私有成員屬性設定值的,有兩個引數,第一個引數為你要為設定值的屬性名,第二個引數是要給屬性設定的值,沒有返回值。
這個方法同樣不用我們手工去呼叫,它也可以做成私有的,是在直接設定私有屬性值的時候自動呼叫的,同樣屬性私有的已經被封裝上 */


function __set($propetyName,$value){

echo 'set propery' ; 
$this->$propetyName = $value; 
}


//__isset()方法: isset()是測定變數是否設定用的函式,傳入一個變數作為引數,如果傳入的變數存在則傳回true,否則傳回false。

function __isset($propertyName){
return  isset($this->$nm); ;
}

// 當在類外部使用unset()函式來刪除私有成員時自動呼叫的<br>";


private function __unset($propertyName){
echo"當在類外部使用unset()函式來刪除私有成員時自動呼叫的<br>";
unset($this->$propertyName);
}


//__call() 當試圖呼叫一個物件並不存在的方法時,呼叫該方法。 

public function __call($method,$arg){  
    echo '你想呼叫我不存在的方法',$method,'方法<br/>';  
    echo '還傳了一個引數<br/>';  
    echo print_r($arg),'<br/>';  
  }


// 只有呼叫靜態方法的時候,靜態方法不存在才會呼叫這個方法 
public static function __callStatic($method,$arg){  
    echo '你想呼叫我不存在的',$method,'靜態方法<br/>';  
    echo '還傳了一個引數<br/>';  
    echo print_r($arg),'<br/>';  
  }
  
 // __clone() 當物件被克隆時,被呼叫 
   public function __clone() {
  echo "我被複制了!"; 
 }
   
  
} 


}


$p1= new People(); 
//直接為私有屬性賦值的操作,會自動呼叫__set()方法進行賦值 
$p1->name="wlt"; 
$p1->sex="man"; 
  
//直接獲取私有屬性的值,會自動呼叫__get()方法,返回成員屬性的值 
echo "name ".$p1->name."<br>"; 
echo "sex : ".$p1->sex."<br>"; 
 
 
 // 下面會呼叫 __isset
 
 var_dump(isset($p1->name));


 // 下面會呼叫__unset
 
 var_dump(unset($p1->name));
 
 // 下面會呼叫__call
 
 $p1->test('1',2),;
 
 // 下面會呼叫__callStatic()
$p1::test('1',2),;


 // 獲取類中的所有方法列表  get_class_methods  
 
var_dump(get_class_methods('People')) ;