最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php中的常用魔術方法匯總

 更新時間:2016年02月14日 11:26:59   投稿:lijiao  
本文針對php中的常用魔術方法進行了詳細的總結介紹,需要的朋友可以過來參考下

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

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

代碼:

//實例化對象時,會調用對象的__construct方法
$obj = new Object();
//給對象不存在的屬性賦值時,會調用對象的__set方法
$obj->title = "hello";
//使用對象不存在的屬性時,會調用對象的__get方法
echo $obj->title;
//調用對象不存在的方法時,會調用對象的__call方法
$obj->test("hello",123,567);
//調用不存在的類靜態(tài)方法時,會調用類的__callStatic方法
Object::staticMethod("static","not found method");
//直接輸出對象時,會調用對象的__toString方法
echo $obj;
//將一個對象當作函數(shù)一樣使用時,會調用對象的__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中的常用魔術方法的全部內(nèi)容,希望對大家的學習有所幫助。

相關文章

最新評論

古田县| 松江区| 盐山县| 周口市| 民乐县| 九江市| 宣恩县| 阳朔县| 徐水县| 黑山县| 长治县| 渭源县| 兴国县| 凤台县| 正蓝旗| 寿光市| 青浦区| 松原市| 上思县| 尉犁县| 南城县| 汾西县| 梨树县| 万盛区| 科尔| 缙云县| 普格县| 新巴尔虎左旗| 长顺县| 肇州县| 汨罗市| 吴堡县| 汾阳市| 成都市| 诏安县| 蓬莱市| 太康县| 沿河| 大庆市| 康定县| 太白县|