PHP的魔術方法學習_PHP教程

來源:互聯網
上載者:User
__set_state()
var_export可以把一個集合匯出為一串字串,這些字串是一些可執行檔PHP代碼。在php5.1.0的物件導向裡,引入了一個叫__set_state的靜態方法來使得var_export支援對象執行個體的匯出。當用var_export匯出一個執行個體的時候,所匯出字串裡,是調用這個靜態方法的代碼。這個方法有一個參數,為包含所匯出的執行個體的所有成員屬性的一個數組。有點抽象,看下面的例子吧。
$v) { $obj->$k = $v; } return $obj; }}$i = new o;$i->age = 21;eval(’$b = ’.var_export($i,true).’;’);//這裡的true表示var_export返回所匯出的字串,而不是把它列印出來。print_r($b);/*輸出:stdClass Object( [skill] => php [age] => 21)*/?>

__clone()
在php5裡,對象間的賦值總是以地址引用來傳遞的。例如下面這個例子,將會輸出66,而不是55.
age = 66;echo $i2->age;?>
如果要以實際值來傳遞,則需要用到clone關鍵詞。
age = 66;echo $i2->age;//輸出55?>
但是,這裡clone的只是$i這個執行個體。如果$i的某個成員屬性也是個執行個體,那麼這個成員屬性還是會以引用方法被傳遞到$i2的。例如下面這個例子:
sub=new o2;$i2 = clone $i;$i->sub->p=5;echo $i2->sub->p;?>
最後輸出的是5,而不是1。也就是說,$i和$i2雖然不是指向的雖然不是同一個執行個體,但是它們的成員屬性$sub卻是指向同一個執行個體。這時候,我們必須藉助__clone這個方法來對$sub進行複製。在o類裡,加入__clone()方法。如下:
sub=clone $this->sub; }}//......?>
這樣,在echo $i2->sub->p;的時候,輸出的就是傳遞時候的值1了。
__autoload()
當建立一個執行個體化的時候,如果對應的類不存在,__autoload()將會被執行,這個函數有一個參數,為所要建立的執行個體對應的類名。在下面的例子裡,當建立一個test類的執行個體的時候,如果/home/surfchen/project/auto.php存在,則require這個檔案,否則列印一個Class test Not Found的錯誤,並中止當前指令碼。

http://www.bkjia.com/PHPjc/371638.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/371638.htmlTechArticle__set_state() var_export可以把一個集合匯出為一串字串,這些字串是一些可執行檔PHP代碼。在php5.1.0的物件導向裡,引入了一個叫__set_stat...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.