2016-05-01 11 views
0

Es gibt bereits viele Threads über diese Art von Problem, aber aus irgendeinem Grund kann ich es nicht zum Laufen bringen.Acces-Variable im übergeordneten Konstruktor von der untergeordneten Funktion gesetzt

In TestClass :: test() ist $ db NULL.

Der $ db-Wert wird in App-Konstrukt festgelegt und ich versuche, diesen Wert von einer erweiterten Klassenfunktion wiederherzustellen. (also muss ich $ db nicht jedes Mal überall einstellen).

Einige Hilfe würde sehr geschätzt werden, danke.

Datei: index.php

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

Datei: App.class.php

<?php 
class App { 
    protected $db; 

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

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

Datei: TestClass.class.php

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

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

Datei: 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

In der Klasse App, ändern '$ db' auf statische Eigenschaft und im Konstruktor ändern diese' $ this-> db = "somevalue"; 'auf' self :: $ db = "somevalue"; ' – AliN11

Antwort

0

Sie haben vergessen, eine this in Ihrem TestClass und eine statische Methode kann nicht nicht-statische Eigenschaften zugreifen. Entfernen Sie das Schlüsselwort static und geben Sie den richtigen Wert zurück.

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

Edit:

Wenn Sie die Instanz des db über eine statische Methode zum Abrufen gemeint Sie müssen deklarieren die Variable als statisch.

class App { 
    protected static $db = 'hey'; 
    ... 
} 

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

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

Ja, es funktioniert, wenn ich das tue: $ CTestClass = new TestClass; echo $ CTestClass -> test(); Aber ich kann TestClass :: test() nicht direkt aufrufen; (mit $ this, wenn nicht im Objektkontext) – WerdZerg

+0

@WerdZerg: Siehe meine Bearbeitung – marvinhagemeister

+0

Ich habe versucht, wie Sie gesagt haben, aber ich habe immer noch das Problem "using $ this wenn nicht im Objekt Kontext". Etwas muss fehlen, aber ich weiß nicht was. Danke für Ihre Hilfe. – WerdZerg

Verwandte Themen