gpt4 book ai didi

php - 公共(public)、私有(private)或 protected 属性(property)?

转载 作者:行者123 更新时间:2023-12-03 23:07:48 26 4
gpt4 key购买 nike

我正在编写 Laravel 包,但遇到了问题。该包调度一个执行如下操作的作业:

class ExampleJob
{
protected $exampleProperty;

function __construct($parameter)
{
$this->exampleProperty = $parameter;
}
}

我需要测试是否使用正确的 $parameter 调度此作业(该值是从数据库检索的,根据情况,它将是不同的值)。

根据文档,Laravel 允许这样做:

Bus::assertDispatched(ShipOrder::class, function ($job) use ($order) {
return $job->order->id === $order->id;
});

但这意味着 $order 属性需要是公共(public)的(在我的例子中,我有:protected $exampleProperty;)。

这是一个好的做法吗?我的意思是宣布一个类属性为公共(public)? OOP 中封装的概念怎么样?

请问有什么想法吗?

最佳答案

使用魔术方法__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;

未找到公共(public)属性时调用 __get 方法。在这种情况下,您只需返回 protected 属性 $exampleProperty。这使得属性 $exampleProperty 作为公共(public)属性可读,但无法从 ExampleJob 类外部进行设置。

关于php - 公共(public)、私有(private)或 protected 属性(property)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248955/

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