为了账号安全,请及时绑定邮箱和手机立即绑定

构造函数中分配的 Laravel 作业新属性未显示在句柄方法中

构造函数中分配的 Laravel 作业新属性未显示在句柄方法中

PHP
Smart猫小萌 2023-04-28 17:42:35
在 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 方法,但如果你手动测试它,你必须自己做。



查看完整回答
反对 回复 2023-04-28
?
慕标5832272

TA贡献1966条经验 获得超4个赞

我认为属性必须是protected而不是private.



查看完整回答
反对 回复 2023-04-28
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

该解决方案没有意义,但将区域属性公开而不是私有似乎有效。



查看完整回答
反对 回复 2023-04-28
?
桃花长相依

TA贡献1860条经验 获得超8个赞

您需要在函数外部定义属性__construct()。目前,这些变量的范围仅限于闭包内可用__construct()。


class SomeJob implements ShouldQueue

{   

     protected $length;

     protected $width;

     protected $area;


     public function __construct()

     {

         //...


查看完整回答
反对 回复 2023-04-28
  • 4 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信