程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 5克隆函數應用淺析

PHP 5克隆函數應用淺析

編輯:關於PHP編程

毫無疑問,PHP5的推出對網絡應用程序的發展產生了深遠意義。這還不僅僅是因為它對於PHP4高度的向後兼容性。

當然,PHP5數據包具備強大的對象模型和一整套新型函數與庫,更不用說它其中便攜式異常機制,這一機制賦予了它有效處理錯誤和異常事件的能力。 通過PHP在服務器上寫入文件

當然,當我們使用“函數”這一詞時,我們所談論的並不僅是通常所指的執行指定任務(如從文件中讀取數據或為所供變量應用過濾器)的那一概念。我們所指的還包括一些神奇功能(比如PHP 5 的克隆函數),即那些不具備默認的確定執行任務且可以被PHP引擎自動調用以響應某些特定事件的函數。

開發對象指向型PHP應用程序時,_set(),_get()和_call()方法就種神奇函數的典型代表,但是還有其他一些神奇函數值得開發員深入分析。在本文裡,我們將集中討論“_clone()”方法,顧名思義,使用“clone”PHP關鍵詞時可以從幕後調用這一方法。

復制對象的時候從幕後觸發函數

就像我們在之前提到的,使用clone關鍵詞的時候,_clone()函數(克隆函數)會被自動援引。為了簡潔起見,現在我們只談論用來創建指定對象單獨副本的clone關鍵詞,而不談及創建引用。  用PHP把HTML添加到多個文件中

現在,返回_clone函數,可以給它一個明確的任務指示。為了實現這一點,我們看看下面的代碼:

  1.  class User   
  2. {  
  3.  
  4. // constructor (not implemented)  
  5.  
  6. public function _construct(){}  
  7.  
  8. // set undeclared property in a restrictive way  
  9.  
  10. public function __set($property, $value)  
  11.  
  12. {  
  13.  
  14. if (in_array($property, array('fname', 'lname', 'email')) === TRUE)  
  15.  
  16. {  
  17.  
  18. $this->$property = $value;  
  19.  
  20. }  
  21.  
  22. }  
  23.  
  24. // get undeclared property  
  25.  
  26. public function __get($property)  
  27.  
  28. {  
  29.  
  30. if (isset($this->$property))  
  31.  
  32. {  
  33.  
  34. return $this->$property;  
  35.  
  36. }  
  37.  
  38. }  
  39.  
  40. // single point to fetch user data  
  41.  
  42. public function __call($method, $args)  
  43.  
  44. {  
  45.  
  46. if ($method === 'fetch' AND emptyempty($args) === FALSE)  
  47.  
  48. {  
  49.  
  50. return $this->$args[0];  
  51.  
  52. }  
  53.  
  54. }  
  55.  
  56. // implement __clone( method  
  57.  
  58. public function __clone()  
  59.  
  60. {  
  61.  
  62. echo 'Cloning user object.';  
  63.  
  64. }  
  65.  

在這個特定示例中,我們要給上述的_clone方法一個不太顯眼的任務,以便幫助你更好地理解,但是要相信該函數可以用來執行更為復雜的任務。不管本文中所演示的_clone函數是如何簡單,復制簡單的User類實例時,該函數非常有助於向我們展示PHP引擎是怎樣調用函數的。

復制對象的時候調用Clone方法

要明白PHP解釋程序是如何調用_clone()函數最好的方法是觀察一個演示如何復制簡單User類實例的具體示例。

我們制作了一個小型腳本,該腳本使用克隆函數中的clone關鍵字來復制一個用戶對象從而觸發有關_clone()方法的調用。該腳本的定義如下所示:

  1.   $user = new User();   
  2. $user->fname = 'Alejandro';  
  3.  
  4. $user->lname = 'Gervasio';  
  5.  
  6. $user->email = '[email protected]';  
  7.  
  8. // display user data  
  9.  
  10. echo 'First Name : ' . $user->fetch('fname') . ' Last Name : ' . $user->fetch('lname') .
    ' Email : ' . $user->fetch('email');  
  11.  
  12. /*  
  13.  
  14. displays the following  
  15.  
  16. First Name : Alejandro Last Name : Gervasio Email : [email protected]  
  17.  
  18. */ 
  19.  
  20. // clone user object  
  21.  
  22. $newuser = clone $user;  
  23.  
  24. /*  
  25.  
  26. displays the following  
  27.  
  28. Cloning user object.  
  29.  
  30. */ 

這段代碼易於編寫,也易於理解。正如你所看到的,一旦腳本在User類中生成一個對象並創建一些未申明的屬性,它就會復制這個對象。這個進程會自動調用相關的_clone()方法。

這一具體方法支持更復雜更有益的任務執行。因此,如果PHP5中附帶的這些神奇函數已經引起你的注意,你或許想通過使用這些函數改善自己的編程技能了。這樣的嘗試將極具啟發性。

結語

本文中,我們討論了如何實施和使用_clone()函數。對象通過clone關鍵詞復制時,該函數會被自動引用;這就是PHP 5克隆函數的強大之處。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved