gpt4 book ai didi

php - 在对象上下文中运行的回调函数?

转载 作者:可可西里 更新时间:2023-11-01 00:00:52 24 4
gpt4 key购买 nike

我试图在运行时配置一个对象,传递一个回调函数,如下所示:

class myObject{
protected $property;
protected $anotherProperty;

public function configure($callback){
if(is_callable($callback)){
$callback();
}
}
}

$myObject = new myObject(); //
$myObject->configure(function(){
$this->property = 'value';
$this->anotherProperty = 'anotherValue';
});

当然我得到以下错误:

Fatal error: Using $this when not in object context

我的问题是,是否有一种方法可以在回调函数中使用 $this 来实现此行为,或者可以得到更好模式的建议。

PS:我更喜欢使用回调。

最佳答案

从您的想法开始,您可以将 $this 作为参数传递给您的回调

但请注意,您的回调 (未在您的类中声明) 将无法访问 protected 或私有(private)的属性/方法 -- 这意味着您必须设置公共(public)方法来访问它们。


你的类(class)看起来像这样:

class myObject {
protected $property;
protected $anotherProperty;
public function configure($callback){
if(is_callable($callback)){
// Pass $this as a parameter to the callback
$callback($this);
}
}
public function setProperty($a) {
$this->property = $a;
}
public function setAnotherProperty($a) {
$this->anotherProperty = $a;
}
}

然后您声明了回调,并像这样使用它:

$myObject = new myObject(); //
$myObject->configure(function($obj) {
// You cannot access protected/private properties or methods
// => You have to use setters / getters
$obj->setProperty('value');
$obj->setAnotherProperty('anotherValue');
});


在 之后调用以下代码行:

var_dump($myObject);

会输出这个:

object(myObject)[1]
protected 'property' => string 'value' (length=5)
protected 'anotherProperty' => string 'anotherValue' (length=12)

这表明回调已被执行,并且您的对象的属性确实已按预期设置。

关于php - 在对象上下文中运行的回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657415/

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