PHP/Laravel parent class 从不同控制器调用时变量为空

PHP/Laravel parent class variable is null when calling from different controllers

Parent Class:

<?php

namespace App\Services;

class RequestVariables {

    protected static $keys_tour;

    public static function init() {

    self::$keys_tour = array_flip(['tour_type', 'city_from']);

    }

}

Child Class:

<?php

namespace App\Services;

class PreviousVersions extends RequestVariables {

       public static function createVersion ($tour) {

            dd(parent::$keys_tour);

  }
}

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

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;    

use App\Services\PreviousVersions;

use App\Tour;

class Tours2Controller extends Controller

{

    public static function PreProcess($tour)

    { 

        PreviousVersions::createVersion($tour);
    }

}

它输出预期的结果:

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

但是当我在另一个控制器中执行相同的功能时:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Tour;

use App\Services\PreviousVersions;


class BookingController extends Controller {

    public function booking($tour)

    {

      PreviousVersions::createVersion($tour);

    }

}

它输出 'null'

我看不出在调用相同方法时导致不同结果的控制器之间有什么不同。有人能告诉我为什么它在第二种情况下输出 'null' 吗?

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

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

createVersions()方法中调用RequestVariables::init()即可解决:

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

或使用 parent 关键字:

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