PHP Classes函数内部函数?

时间:2017-06-04 16:28:09

标签: php

我正在自学PHP语言。我专注于最新的PHP OOP语言。

我搜索了一些“准备安装”的PHP软件,当我扫描一些搜索引用并知道时,我看到了这样的结构代码行(不记得所以我会创建自己的):

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

所以我的问题是,如何重现上面的代码?我不知道用什么术语代码(对象,我猜?)。

这样的事情:

$newLogin->search($uid)->setLogin($dateToday);
像那样。我真的需要这样做,所以我可以组织我的编码结构。谢谢顺便说一句。

还有最后一个问题,这是否可能?

3 个答案:

答案 0 :(得分:1)

使用dependency injection,这是一种相当直接的观察方式。

尝试一下:https://3v4l.org/iSJgL

注意,由于string类型提示,下面需要PHP 7。删除它,我相信它应该在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];
    }

}

答案 1 :(得分: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

您只需返回方法上的对象实例以允许方法链接。

答案 2 :(得分:0)

您可以阅读更多here

它的方法链接。

见下面的代码:

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

        return $this;
    }
}

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