請選擇 進入手機版 | 繼續訪問電腦版
搜索
熱搜: 活動 交友 discuz
查看: 8685|回復: 0

[PHP] [PHP] 物件多層指標:可連接多個 "->" 來連續處理、執行之物件寫法

[複製鏈接]
發表於 2014-3-19 09:51:48 | 顯示全部樓層 |閱讀模式
物件(Object) 在撰寫時, 會希望 於使用、操作上, 可以更直覺化(或更具擴充性), 下述的寫法就很常見.

$db->select('*')->limit(10)->begin(0) ... 等等. (在操作上(Method), 可以一直 "->" 的操作下去.)

執行順序:
select('*')
limit(10)
begin(0)
但是一般物件(Class)教學的寫法, 都只能 $db->select('*') 就結束了, 要再串接多個 ->, 就會直接出現錯誤訊息.


PHP Class - 標準物件的寫法
範例1
  1. <?php
  2. class Test
  3. {
  4.     protected $str;

  5.     public function __construct()
  6.     {
  7.     }

  8.     public function a()
  9.     {
  10.         $this->str .= 'a';
  11.     }

  12.     public function b()
  13.     {
  14.         $this->str .= 'b';
  15.     }

  16.     public function display()
  17.     {
  18.         return $this->str . "\n";
  19.     }
  20. }

  21. /* 測試 */
  22. $a = new Test();
  23. $a->a(); // a
  24. $a->b(); // b
  25. // $a->a()->b(); // error
  26. echo $a->display(); // ab
  27. ?>
複製代碼


PHP Class - 串接多個 "->" 的寫法
要串接多個 "->", 只要在 Function (Method) 的 回傳值(return value), 回傳 $this (物件本身) 即可. (將物件本身回傳, 即可繼續操作下去.)

範例2
  1. <?php
  2. class Test
  3. {
  4.     protected $str;

  5.     public function __construct()
  6.     {
  7.     }

  8.     public function a()
  9.     {
  10.         $this->str .= 'a';

  11.         return $this;
  12.     }

  13.     public function b()
  14.     {
  15.         $this->str .= 'b';

  16.         return $this;
  17.     }

  18.     public function display()
  19.     {
  20.         return $this->str . "\n";
  21.     }
  22. }

  23. /* 測試 */

  24. $a = new Test();
  25. $a->a(); // a
  26. $a->b(); // ab => a + b
  27. $a->a()->b(); // abab => ab + a + b
  28. echo $a->display(); // abab
  29. ?>
複製代碼
範例說明
範例1 的值就是每個執行完, 都是單獨的程序
範例2 的值, 會一直不斷的被累加起來(註: 字串一直接起來).
註: 其它程式語言也是相同作法.

出處:Tsung's Blog
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2024-3-29 20:26 , Processed in 0.026774 second(s), 17 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表