首頁 > 後端開發 > php教程 > php中常用的魔術方法總表

php中常用的魔術方法總表

WBOY
發布: 2016-07-29 09:03:45
原創
887 人瀏覽過

這篇文章詳細的對php中的常用魔術方法進行了整理歸納,分享給大家供大家參考,具體內容如下

1、PHP把所有”__”開頭的方法當做魔術方法,所以任何自定義的方法都不能是”__”開頭
php提供的重載,是指動態的建立屬性或方法。重載是透過魔術方法來實現的。這些魔術方法的參數不能飲用傳遞,__get(),__set(),__isset(),__unset(),實作類別屬性重載。
2、當存取類別中不可存取的屬性時,將呼叫__get()方法
3、當存取類別中不可存取的屬性時,根據不同的情況會呼叫__get(),__set(),__isset( ),__unset(),其中當存取屬性時,使用函數isset()或empty()時,將呼叫__isset()方法使用unset()函數時,將呼叫__unset()方法。
4、這四個方法不能使用static關鍵字定義,在php5.3.0後,一個warning層級的警告將發生,當使用static方法定義這4個方法時。
5、何謂不可存取的屬性:(1)類別中沒有的屬性,(2)私有變數在類別外被存取。方法重載,透過__call()和__callstatic()來實 現,兩者的差異是一個上下文環境是否為靜態方法,後者在呼叫不可存取的靜態方法時會被呼叫。 __callstatic()是在php5.3.0才被添 加。
6、__sleep()和__wakeup()
serialize()序列化時,會先檢查是否有__sleep()函數,如果存在,則先呼叫__sleep(),傳回一個包含所有變數名稱的陣列,如果該方法不傳回任何內容,則null被序列化,並產生一個notice層級的錯誤。
__wakeup()方法和__sleep()相反,在呼叫unserialize()時被呼叫
7、__toString(),讓一個類別決定它如何轉換成字串,在php5.2.0之前,這個方法只能結合echo或print方法生效,php5.2.0之後,可以結合printf()修飾,但修飾的時候也不能用類似%d之類的非字元修飾符。
8、__invoke(),當嘗試以呼叫函數的方式呼叫物件時,將出發這個函數,只在php5.3之後生效。
9、__set_state()靜態方法,當呼叫var_export()的時候,才會呼叫這個靜態方法,php5.1.0之後生效。唯一參數是接收一個陣列。
10、__construct()和__destruct(),建構子和析構函數,建構子主要用於類別的初始化,析構函數在某個物件的所有參考都 刪除後或物件被顯示的銷毀時運作。在析構函數中不允許拋出異常,否則會出發一個fatal error,析構函數在腳本結束時調用,此時所有的http header都已經發出.
11、__clone(),對象複製,此方法不能直接被調用,必須透過clone關鍵字顯示調用

程式碼:

//实例化对象时,会调用对象的__construct方法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set方法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get方法
echo $obj->title;
//调用对象不存在的方法时,会调用对象的__call方法
$obj->test("hello",123,567);
//调用不存在的类静态方法时,会调用类的__callStatic方法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString方法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke方法
echo $obj("test");
//克隆对象时,会调用对象的__clone方法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset方法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset方法
unset($obj->aaa);
 
 
class Object{
 
  protected $array = array();
 
  function __construct()
  {
    echo __METHOD__."你正在实例化对象<br>";
  }
 
  function __set($name, $value)
  {
    $this->array[$name]=$value;
  }
 
  function __get($name)
  {
    return $this->array[$name];
  }
 
  function __call($name, $arguments)
  {
    var_dump($name,$arguments);
    return "magic function\n";
  }
 
  static function __callStatic($name, $arguments)
  {
    var_dump($name,$arguments);
    return "magic static function";
  }
 
  function __toString()
  {
    return __CLASS__.'<br>';
  }
 
  function __invoke($arguments)
  {
    var_dump($arguments);
    return __METHOD__.'<br>';
  }
 
  function __clone()
  {
    echo __METHOD__."你正在克隆对象<br>";
  }
 
  function __isset($name)
  {
    echo __METHOD__."你想判断有没有属性".$name."<br>";
    return 1;
  }
 
  function __unset($name)
  {
    echo __METHOD__."你想删除属性".$name."<br>";
  }
 
 
  function __destruct()
  {
    echo __METHOD__."你正在注销对象<br>";
  }
 
 
 
}

登入後複製

以上就是關於php中的常用魔術方法的全部內容,希望對大家的學習有所幫助。

以上就介紹了php中常用的魔術方法總結,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板