2017-06-04 97 views
-3

我正在自學PHP語言。我專注於最新的PHP OOP語言。PHP類函數裏面的函數?

我搜索了一些「隨時可以安裝」的PHP軟件,當我掃描一些關於搜索和知道的引用時,我看到了帶有這樣結構的代碼行(不記得所以我會創建我的自己):

$myapp->settings->getValue('openforum'); 
$myapp->settings->setValue('closeformaintenance', '1'); 

所以我的問題是,我怎麼能重現上面的代碼?我不知道用這行代碼(對象,我猜是什麼?)。

事情是這樣的:

$newLogin->search($uid)->setLogin($dateToday); 

這樣。我真的需要這樣做,所以我可以組織我的編碼結構。謝謝你的方式。

而且對於最後一個問題,這是可能的嗎?

+0

這是如何與「靈活的URL爲PHP」?這是關於面向對象的一個​​問題。 – PeterMader

+0

糟糕。讓我改變標題。對不起。 – Kaitenz

+2

這並不是一個清晰的,可回答的問題。 –

回答

0

你試圖實現的方法稱爲方法鏈。您可以通過以下方式得到:

<?php 
class TestClass { 
    private $val = ''; 

    public function test1($val) { 
     $this->val = $val; 
     return $this; 
    } 
    public function test2() { 
     echo 'Hello '.$this->val; 
    } 
} 

$test->test1('World')->test2(); // Hello World 

您只需返回方法上的對象實例以允許方法鏈接。

+0

這就是我要找的。謝謝@Sebastian Brosch!驚人。我會在筆記中保存這個。 「方法鏈接」。這對我幫助很大。 – Kaitenz

+0

我現在實際上並沒有看到方法鏈接,現在我想到了它。 OP只是將一個結果注入'$ myapp'的方法調用中。如果有的話,'$ this-> settings'是通過'$ myapp'獲得的另一個對象的引用,但我沒有看到這個例子:'$ myapp-> settings-> setValue('a',1 ) - >的getValue( 'b')' –

0

您可以閱讀更多here

這是方法鏈接。

見下面的代碼:

class T { 
    public function test() { 
     // do something 

     return $this; 
    } 
} 

$x = new T; 
$x->test()->test(); 
1

下面是看着它,使用dependency injection相當直接的方式。

試試看:https://3v4l.org/iSJgL

注意,下面需要PHP 7由於string類型提示。刪除,我相信它應該在5.6中工作得很好。

<?php 

$myapp = new MyApp(new SettingsBag([ 
    'works' => false, 
    'random' => rand(), 
])); 

var_dump($myapp->settings()->get('random')); 

var_dump($myapp->settings()->get('works')); 

// Let's change it up... 
$myapp->settings()->set('works', true); 

// Now it should be true. 
var_dump($myapp->settings()->get('works')); 

這些通常有namespaces\App和/或\App\Configuration,但我在這裏忽略所以它更容易跟蹤:

class MyApp { 

    private $settings_bag = null; 

    function __construct(SettingsBag $settings_bag) 
    { 
     $this->settings_bag = $settings_bag; 
    } 

    public function settings() 
    { 
     return $this->settings_bag; 
    } 

} 

class SettingsBag { 

    private $settings = null; 

    function __construct(array $settings = []) 
    { 
     $this->settings = $settings; 
    } 

    public function set(string $key, $value) 
    { 
     return $this->settings[$key] = $value; 
    } 

    public function get(string $key) 
    { 
     return $this->settings[$key]; 
    } 

}