作者:王小小小小弦 | 来源:互联网 | 2022-12-05 12:43
我正在写一个Laravel包,但我遇到了问题.该程序包调度执行以下操作的作业:
class ExampleJob
{
protected $exampleProperty;
function __construct($parameter)
{
$this->exampleProperty = $parameter;
}
}
我需要测试是否使用正确的$参数调度此作业(此值是从数据库中检索的,并且根据情况,它将是不同的值).
根据文档,Laravel允许这样做:
Bus::assertDispatched(ShipOrder::class, function ($job) use ($order) {
return $job->order->id === $order->id;
});
但这意味着$ order属性需要公开(在我的情况下,我有:protected $ exampleProperty;).
这是一个好习惯吗?我的意思是将类属性声明为公共属性?在OOP中封装的概念怎么样?
有什么想法吗?
1> 小智..:
使用魔术方法__get
class ExampleJob
{
protected $exampleProperty;
function __construct($parameter)
{
$this->exampleProperty = $parameter;
}
public function __get($name)
{
return $this->$name;
}
}
$exampleJob = new ExampleJob(42);
// echoes 42
echo $exampleJob->exampleProperty;
// gives an error because $exampleProperty is protected.
$exampleJob->exampleProperty = 13;
未找到公共属性时调用__get方法.在这种情况下,您只需返回受保护的属性$ exampleProperty.这使得属性$ exampleProperty可以作为公共属性读取,但不能从ExampleJob类外部设置.