考虑这个类的安排——特别是魔术函数 __invoke:
class Barman {
public function __construct() {
// .. .constructor stuff - whatever
}
public function makeDrink() {
return "vodka martini, shaken";
}
}
class Bar {
private $arr_barmen = array();
public function __construct() {
$this->arr_barmen['john'] = new Barman();
}
public function __invoke($barman_id) {
echo "I have been invoked";
return $this->arr_barmen[$barman_id];
}
public function aBarFunc($param) {
return "yes it worked ," .$param;
}
}
class Foo {
public $myBar;
public function __construct() {
$this->myBar = new Bar();
}
}
我想写这样的语法
$company = new Foo();
$company->myBar('john')->makeDrink();
首选结果:“伏特加马提尼酒,摇晃”
实际结果:
“调用未定义的方法 Foo::myBar()”
使用魔法方法调用 myBar() 应该返回一个酒保对象,您可以在该对象上调用酒保的任何公共方法
但是现在考虑一下(确实有效)
$company = new Foo();
$myBar = $company->myBar;
$drink = $myBar('john')->makeDrink();
echo $drink;
// Result:
// I have been invoked
// vodka martini, shaken
发生什么了?我不喜欢这种解决方法 - 它不时尚。我需要它以这种方式工作:
$company->myBar('john')->makeDrink();
请帮忙?:-)