PHP 5複製函數應用淺析_PHP教程

來源:互聯網
上載者:User
毫無疑問,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. // constructor (not implemented)
  4. public function _construct(){}
  5. // set undeclared property in a restrictive way
  6. public function __set($property, $value)
  7. {
  8. if (in_array($property, array('fname', 'lname', 'email')) === TRUE)
  9. {
  10. $this->$property = $value;
  11. }
  12. }
  13. // get undeclared property
  14. public function __get($property)
  15. {
  16. if (isset($this->$property))
  17. {
  18. return $this->$property;
  19. }
  20. }
  21. // single point to fetch user data
  22. public function __call($method, $args)
  23. {
  24. if ($method === 'fetch' AND emptyempty($args) === FALSE)
  25. {
  26. return $this->$args[0];
  27. }
  28. }
  29. // implement __clone( method
  30. public function __clone()
  31. {
  32. echo 'Cloning user object.';
  33. }
  34. }

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

複製對象的時候調用Clone方法

要明白PHP解釋程式是如何調用_clone()函數最好的方法是觀察一個示範如何複製簡單User類執行個體的具體樣本。

我們製作了一個小型指令碼,該指令碼使用複製函數中的clone關鍵字來複製一個使用者物件從而觸發有關_clone()方法的調用。該指令碼的定義如下所示:

 
  1. $user = new User();
  2. $user->fname = 'Alejandro';
  3. $user->lname = 'Gervasio';
  4. $user->email = 'alejandro@mydomain.com';
  5. // display user data
  6. echo 'First Name : ' . $user->fetch('fname') . ' Last Name : ' . $user->fetch('lname') .
    ' Email : ' . $user->fetch('email');
  7. /*
  8. displays the following
  9. First Name : Alejandro Last Name : Gervasio Email : alejandro@mydomain.com
  10. */
  11. // clone user object
  12. $newuser = clone $user;
  13. /*
  14. displays the following
  15. Cloning user object.
  16. */

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

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

結語

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


http://www.bkjia.com/PHPjc/446617.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446617.htmlTechArticle毫無疑問,PHP5的推出對網路應用程式的發展產生了深遠意義。這還不僅僅是因為它對於PHP4高度的向後相容性。 當然,PHP5資料包具備強大的...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.