【发布时间】:2023-03-11 13:55:01
【问题描述】:
我为 PHP 5.4.x 编写了以下类。这应该像我预期的那样工作吗?
class SqlBuilder {
private $dbTable;
private $action;
private $data;
private $clause;
public function toString() {
// $sql = generate sql string
// [...]
return $sql;
}
[...]
public function setClause($clause) {
$this->clause = $clause;
}
public function setDbTable($dbTable) {
$this->dbTable = $dbTable;
}
public function setAction($action) {
$this->action = $action;
}
}
$sql = (new \dbal\SqlBuilder())
->setAction($this->action)
->setClause($this->clause)
->setDbTable($this->dbTable)
->toString();
我希望能够访问我所有的 setter 方法。相反,我看到以下错误:
致命错误:在非对象上调用成员函数 toString()
这似乎有效:
$builder= new \dbal\SqlBuilder();
$builder->setAction($this->action)
$builder->setClause($this->clause)
$builder->setDbTable($this->dbTable)
$sql = $builder->toString();
但我知道这也有效:
class Foo
{
public $a = "I'm a!";
public $b = "I'm b!";
public $c;
public function getB() {
return $this->b;
}
public function setC($c) {
$this->c = $c;
return $this;
}
public function getC() {
return $this->c;
}
}
print (new Foo)
->setC($_GET["c"])
->getC(); // I'm c!
我以前在 Javascript 中使用过这种语法风格。有没有办法让它在 PHP 中工作?
【问题讨论】:
-
我不确定我是否理解这个问题。
-
SqlBuilder类是什么?我不认识。 -
我真的很失望,因为这不是一个真正的问题而被关闭。是的,提出问题的人很难表达他的问题,但这是一个真实的问题。如果你花时间仔细阅读它,我想你会明白他的要求。
-
我已经修改了问题以反映我认为 nakwa 的问题。
标签: php method-chaining