将方法作为参数发送给其他 class 构造函数并执行它
Send method as parameter to other class constructor and execute it
我有两个 class A
和 B
我想通过 B
构造函数 'send' 从 A
到 B
的方法,然后在 B
中执行它。我一直在尝试像这样使用匿名函数:
class A
{
public function __construct()
{
// Send testMethod() to B with an anonymous function
new B(function (string $test) {
$this->testMethod($test);
});
}
protected function testMethod(string $test) {
echo ($test);
}
}
class B
{
protected $testFct;
public function __construct($fctToExecute)
{
// Asign anonymous function to $testFct to be executed in all object
$this->testFct= function (string $test) {
$fctToExecute($test);
};
}
// Want to be able now to call this $testFct function in a method like :
protected function methodWhereICallTestfct() {
$this->testFct("I'm dumb!"); // It has to echo "I'm dumb!"
}
}
但是当我尝试设置它时,我总是会遇到这样的错误:
Uncaught Error: Call to undefined method testFct()
你知道问题出在哪里吗?我想指定我的 php 版本是 PHP 7.1.3
.
编辑:
Here 是否有可能看到与我的代码更相似的代码,其中 return 错误
您的代码中有 2 个错误。
第一个错误是你忽略了B::__construct()
中的参数$fctToExecute
。如果您想将传递的闭包保存到对象 B
的 属性 中,那么您不需要另一个闭包。
public function __construct(closure $fctToExecute) {
// Asign anonymous function to $testFct to be executed in all object
$this->testFct = $fctToExecute;
}
第二个问题是,当您尝试执行闭包时,您实际上是在尝试执行一个名为 testFct
的函数。您应该使用括号来声明操作的优先级。
$this->testFct("I'm dumb!"); // This looks for a function called testFct
($this->testFct)("I'm dumb!"); // This will execute the closure stored in the property called $testFct
括号在这里有很大的不同。
我有两个 class A
和 B
我想通过 B
构造函数 'send' 从 A
到 B
的方法,然后在 B
中执行它。我一直在尝试像这样使用匿名函数:
class A
{
public function __construct()
{
// Send testMethod() to B with an anonymous function
new B(function (string $test) {
$this->testMethod($test);
});
}
protected function testMethod(string $test) {
echo ($test);
}
}
class B
{
protected $testFct;
public function __construct($fctToExecute)
{
// Asign anonymous function to $testFct to be executed in all object
$this->testFct= function (string $test) {
$fctToExecute($test);
};
}
// Want to be able now to call this $testFct function in a method like :
protected function methodWhereICallTestfct() {
$this->testFct("I'm dumb!"); // It has to echo "I'm dumb!"
}
}
但是当我尝试设置它时,我总是会遇到这样的错误:
Uncaught Error: Call to undefined method testFct()
你知道问题出在哪里吗?我想指定我的 php 版本是 PHP 7.1.3
.
编辑:
Here 是否有可能看到与我的代码更相似的代码,其中 return 错误
您的代码中有 2 个错误。
第一个错误是你忽略了B::__construct()
中的参数$fctToExecute
。如果您想将传递的闭包保存到对象 B
的 属性 中,那么您不需要另一个闭包。
public function __construct(closure $fctToExecute) {
// Asign anonymous function to $testFct to be executed in all object
$this->testFct = $fctToExecute;
}
第二个问题是,当您尝试执行闭包时,您实际上是在尝试执行一个名为 testFct
的函数。您应该使用括号来声明操作的优先级。
$this->testFct("I'm dumb!"); // This looks for a function called testFct
($this->testFct)("I'm dumb!"); // This will execute the closure stored in the property called $testFct
括号在这里有很大的不同。