gpt4 book ai didi

PHP 5.4 - 特性和 self /静态

转载 作者:行者123 更新时间:2023-12-03 00:11:35 25 4
gpt4 key购买 nike

我想按如下方式在我的类上链接方法调用:

new Obj($args, $if, $any)->foo()->bar();

不幸的是,我必须将结构括在括号内:

(new Obj($args, $if, $any))->foo()->bar();

所以我希望有一个可以在每个类中重用的特征,我希望能够做类似的事情:

Obj::create($args, $if, $any)->foo()->bar();

我希望它成为一个特征,这样我的类仍然可以从其他类继承。我已经到了这一点:

trait Create
{
public static final function create()
{
$reflect = new ReflectionClass(/* self ? static ? Anything else ? */);
return $reflect->newInstanceArgs(func_get_args());
}
}

class Obj
{
use Create;

// ...
}

但似乎特征不处理 self 或 static 关键字,而且我无法执行 get_class($this) 因为这是静态的。有没有明确的方法来做我想做的事?

感谢您的阅读。

编辑:对于那些想知道的人,这就是为什么我希望它成为一个特征而不是一个抽象基类:

$database = (new Database())
->addTable((new Table())
->addColumn((new Column('id', 'int'))
->setAttribute('primary', true)
->setAttribute('unsigned', true)
->setAttribute('auto_increment', true))
->addColumn(new Column('login', 'varchar'))
->addColumn(new Column('password', 'varchar')));

$database = Database::create()
->addTable(Table::create()
->addColumn(Column::create('id', 'int')
->setAttribute('primary', true)
->setAttribute('unsigned', true)
->setAttribute('auto_increment', true))
->addColumn(Column::create('login', 'varchar'))
->addColumn(Column::create('password', 'varchar')));

括号深度更少,错误更少,修复这些错误所需的时间更少,而且代码更容易阅读,而且在我看来,代码看起来更好。

最佳答案

是的,有get_called_class() ,这正是您想要的。

关于PHP 5.4 - 特性和 self /静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com