PHP5.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();
すべてのセッターメソッドにアクセスできることを期待しています。代わりに、次のエラーが表示されます。
致命的なエラー:非オブジェクトでのメンバー関数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で動作させる方法はありますか?