在 Laravel 作业类中,其代码如下图所示。如果满足条件,我想为我的对象分配一个属性(保留不是数据库上的列)。问题是我在构造函数之外看不到该属性。请问我做错了什么?class SomeJob implements ShouldQueue{ private $length = 300; private $width; private $area; public function __construct() { $areas = Area::where('length', $this->length)->get()->each(function($area) { if($area->length === 300) { $area->reserve = ($area->length + 400); } }); $this->area = $areas; // *log has $area } public function handle() { $area = $this->area; logger($area); // *log does not have $area }}
4 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
要访问方法中的任何属性,您必须显式调用该方法,例如$sj = new someJob(); $sj->handle()
;. “Var 转储”类揭示其属性,并且根据环境和可见性,某些属性可能可见也可能不可见。当一个类被实例化时,首先会自动调用构造函数,这就是为什么您可以“记录”并查看您的类属性的原因。在引擎盖内,Laravel 在运行作业类时调用 handle 方法,但如果你手动测试它,你必须自己做。
桃花长相依
TA贡献1860条经验 获得超8个赞
您需要在函数外部定义属性__construct()。目前,这些变量的范围仅限于闭包内可用__construct()。
class SomeJob implements ShouldQueue
{
protected $length;
protected $width;
protected $area;
public function __construct()
{
//...
- 4 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消