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();
}
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();
}