我正在自学PHP语言。我专注于最新的PHP OOP语言。
我搜索了一些“准备安装”的PHP软件,当我扫描一些搜索引用并知道时,我看到了这样的结构代码行(不记得所以我会创建自己的):
$myapp->settings->getValue('openforum');
$myapp->settings->setValue('closeformaintenance', '1');
所以我的问题是,如何重现上面的代码?我不知道用什么术语代码(对象,我猜?)。
这样的事情:
$newLogin->search($uid)->setLogin($dateToday);
像那样。我真的需要这样做,所以我可以组织我的编码结构。谢谢顺便说一句。
还有最后一个问题,这是否可能?
答案 0 :(得分:1)
使用dependency injection,这是一种相当直接的观察方式。
注意,由于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();