2017-11-27 14 views
0

親クラス:PHP/Laravelの親クラス変数がnullである

<?php 

namespace App\Services; 

class RequestVariables { 

    protected static $keys_tour; 

    public static function init() { 

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

    } 

} 

子供クラス:私は第一のコントローラからPreviousVersions::createVersion()を呼び出す

<?php 

namespace App\Services; 

class PreviousVersions extends RequestVariables { 

     public static function createVersion ($tour) { 

      dd(parent::$keys_tour); 

    } 
} 

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

} 

ことが期待されているものを出力:私ができる

<?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); 

    } 

} 

それは 'ヌル' を出力します

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

が、私は別のコントローラで同じ機能を実行するとき同じmを呼び出すときに異なる結果を引き起こすコントローラ間で何が違うのか分かりません民法。誰かが2番目のケースで「null」を出力する理由を教えてもらえますか?

詳細が必要な場合は、お尋ねください。

+0

を? – Camilo

+0

@カミロあなたはもっと具体的になりますか? –

+0

'$ keys_tour'プロパティは、' RequestVariables'クラスの 'init()'メソッドの中で設定されています。 '$ keys_tour'の値を設定するには、そのメソッドを呼び出す必要があります。 – Camilo

答えて

3

RequestVariablesクラスのinit()メソッド内には、$keys_tourプロパティが設定されています。

あなたはcreateVersions()メソッド内RequestVariables::init()を呼び出すことによってそれを解決することができます。

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

それともparentキーワード使用: `のinit()を呼び出している`

public static function createVersion ($tour) 
{ 
    parent::init(); 
} 
関連する問題