2016-05-01 12 views
0

あり、この種の問題について、多くのスレッドがすでにありますが、何らかの理由で、私はそれを動作させることはできません。 TestClassをで子関数から親のコンストラクタ内の変数セットをACCES

::テスト()、$ DBはNULLです。

$のデシベル値は、アプリケーションの構築物に設定されていると私は拡張クラス関数からその値を回復しようとしています。 (だから私はいつでもどこでも$ dbを設定する必要はありません)。

いくつかの助けをいただければ幸いです、ありがとう。

ファイル:index.phpの

<?php  
    include('classes/App.class.php'); 
    $oApp = new App(); 
    echo TestClass::test(); 
?> 

ファイル:App.class.php

<?php 
class App { 
    protected $db; 

    public function __construct() { 
     include_once("CAutoLoader.class.php"); 
     $oCAutoLoader = new CAutoLoader(); 

     $this->db = "someValue"; 
    } 
} 
?> 

ファイル:TestClass.class.php

<?php 
class TestClass extends App 
{ 
    function __construct() { 
    } 

    public static function test() { 
     return $db; 
    } 
} 
?> 

ファイル:CAutoLoader.class.php

<?php 
class CAutoLoader { 
    CONST CLASS_EXTENSION = '.class.php'; 

    public function __construct() { 
     spl_autoload_register(array($this, 'loader')); 
    } 

    private function loader ($className) { 
     include $className . self::CLASS_EXTENSION; 
    } 
} 
?> 
+0

、静的プロパティへの変更 '$のdb'とコンストラクタの変更で、この'ます$ this->デシベル= "someValueの"; ''自己:: $デシベル= "someValueの" へ; ' – AliN11

答えて

0

あなたTestClassthisを忘れてしまったし、静的メソッドは非静的プロパティにアクセスすることはできません。 staticキーワードを削除し、適切な値を返します。

public function test() { 
    return $this->db; 
} 

編集:

あなたは静的として変数を宣言しなければなりません静的メソッドを介してdbのインスタンスを取得することを意図している場合。

クラスアプリで
class App { 
    protected static $db = 'hey'; 
    ... 
} 

class TestCase extends App { 
    public static function test() { 
     return parent::$db; 
    } 
} 

echo TestCase::test(); // returns hey 
+0

はい、それは私が行う場合に動作します: $ CTestClass = new TestClass; echo $ CTestClass - > test(); しかし、私はTestClass :: test()を直接呼び出すことはできません。 (ないときは、オブジェクトのコンテキストで$これを使用して) – WerdZerg

+0

@WerdZerg:あなたが話したように私を参照してください編集 – marvinhagemeister

+0

私が試したが、私はまだ「$これを使用していないオブジェクトコンテキストで」問題が発生しています。何かが欠落しているはずですが、私は何がわかりません。ご協力いただきありがとうございます。 – WerdZerg

関連する問題