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

在 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

  }


}


Smart猫小萌
浏览 133回答 4
4回答

慕沐林林

要访问方法中的任何属性,您必须显式调用该方法,例如$sj = new someJob(); $sj->handle();. “Var 转储”类揭示其属性,并且根据环境和可见性,某些属性可能可见也可能不可见。当一个类被实例化时,首先会自动调用构造函数,这就是为什么您可以“记录”并查看您的类属性的原因。在引擎盖内,Laravel 在运行作业类时调用 handle 方法,但如果你手动测试它,你必须自己做。

慕标5832272

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

慕哥9229398

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

桃花长相依

您需要在函数外部定义属性__construct()。目前,这些变量的范围仅限于闭包内可用__construct()。class SomeJob implements ShouldQueue{        protected $length;     protected $width;     protected $area;     public function __construct()     {         //...
打开App,查看更多内容
随时随地看视频慕课网APP