gpt4 book ai didi

PHP Magic __invoke 对类的对象属性

转载 作者:行者123 更新时间:2023-12-05 00:59:41 25 4
gpt4 key购买 nike

考虑这个类的安排 - 特别是魔术函数 __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() 应该返回一个酒保对象,您可以在该对象上调用酒保的任何公共(public)方法

但现在考虑一下(确实有效)

$company = new Foo();
$myBar = $company->myBar;
$drink = $myBar('john')->makeDrink();
echo $drink;

// Result:
// I have been invoked
// vodka martini, shaken

那么发生了什么?我不喜欢这种解决方法 - 它不时尚。我需要它以这种方式工作:

$company->myBar('john')->makeDrink();

请帮忙? :-)

最佳答案

我相信你可以在它周围加上大括号:

$company = new Foo();
$drink = ($company->myBar)('john')->makeDrink();
echo $drink; // vodka martini, shaken

关于PHP Magic __invoke 对类的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760574/

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