从不同控制器调用时,PHP/Laravel父类变量为null



父母类:

<?php
namespace AppServices;
class RequestVariables {
    protected static $keys_tour;
    public static function init() {
    self::$keys_tour = array_flip(['tour_type', 'city_from']);
    }
}

儿童课:

<?php
namespace AppServices;
class PreviousVersions extends RequestVariables {
       public static function createVersion ($tour) {
            dd(parent::$keys_tour);
  }
}

当我从第一控制器调用PreviousVersions::createVersion()时:

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;    
use AppServicesPreviousVersions;
use AppTour;
class Tours2Controller extends Controller
{
    public static function PreProcess($tour)
    { 
        PreviousVersions::createVersion($tour);
    }
}

它输出预期的内容:

array:2 [
  "tour_type" => 0
  "city_from" => 1 ]

但是,当我在另一个控制器中执行相同的函数时:

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppTour;
use AppServicesPreviousVersions;

class BookingController extends Controller {
    public function booking($tour)
    {
      PreviousVersions::createVersion($tour);
    }
}

它输出'null'

我看不到我的控制器之间有什么不同,从而在调用同一方法时会导致不同的结果。有人可以告诉我为什么在第二个情况下输出" null"?

如果您需要更多信息,请询问

$keys_tour属性是在RequestVariables类的init()方法中设置的。

您可以通过在createVersions()方法中调用RequestVariables::init()来解决它:

public static function createVersion ($tour)
{
    RequestVariables::init();
}

或使用parent关键字:

public static function createVersion ($tour)
{
    parent::init();
}

最新更新