从你的想法开始,你可以$this
作为参数传递给你的回调
但请注意,您的回调 (未在您的类中声明) 将无法访问受保护的或私有的属性/方法——这意味着您必须设置公共方法来访问它们。
您的课程将如下所示:
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)
这表明回调已执行,并且您的对象的属性确实已按预期设置。