2012-08-12 46 views
1

可能重複:
PHP Method chaining Confusion定義PHP類

,如果我有一個PHP類

class ClassName { 
    function f1() { 
     //... 
    } 
    function f2() { 
     //... 
    } 
} 
$cn = new ClassName(); 

如何定義,我可以在風格

使用功能的類
$cn->f1()->f2(); 

代替

$cn->f1(); 
$cn->f2(); 

謝謝。

回答

4

要在您需要從功能返回當前對象功能鏈接..

return $this; 

在你的函數f1()添加這個..

class ClassName { 
    function f1() { 
     //... 
     return $this; 
    } 
    function f2() { 
     //... 
     return $this; 
    } 
} 
+0

這將是正確的。 – 2012-08-12 06:48:32

+0

非常感謝! – iff 2012-08-12 07:19:03

6
class ClassName { 
    public function f1() { 
     //... 
     return $this; 
    } 
    public function f2() { 
     //... 
     return $this; 
    } 
    // and for a static 
    public static function sf1() { 
     // ... 
     return self; 
    } 
} 

但是,方法鏈接是不好主意。這使得難以閱讀代碼。

如果你正在返回同一個對象的實例,它不是直接有害的。但是,當你開始編寫代碼如$locator->get('MySQL')->connection()->query('SELECT 1');時,那麼堅持維護你的代碼的人可能會發現你的住處和懲罰你。如果你正在通過「但jquery做它」推理,我很抱歉告訴你,但是 - 通常不是 - 是一個跡象,這是一個不好的做法。

+2

我認爲方法鏈可以是一個好主意,因爲它使某些代碼更易於閱讀。 – erisco 2012-08-12 06:50:09

+2

@erisco,在一些非常特殊的情況下,如果你堅持同一個實例 - 是的,你是對的。但一般的經驗法則是:*「避開它」*。 – 2012-08-12 06:54:54

+0

其非常糟糕..可能這就是爲什麼Zend框架在其所有引用者中使用這個請求 – mschr 2012-08-12 07:02:13