Acces переменная, заданная в Родительском конструкторе из дочерней функции

Есть уже много тем о такого рода проблеме, но по какой-то причине я не могу заставить его работать.

В TestClass::test () значение $db равно NULL.

Значение $db задано в App construct, и я пытаюсь восстановить это значение из расширенной функции класса. (поэтому мне не нужно устанавливать $db каждый раз везде).

Некоторая помощь была бы очень признательна, спасибо.

Файл: index.РНР

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

Файл: App.класс.РНР

<?php
class App {
    protected $db;

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

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

Файл: TestClass.класс.РНР

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

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

Файл: CAutoLoader.класс.РНР

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

1 ответ

  1. Вы забыли a thisв вашем TestClassи статический метод не может получить доступ к нестатическим свойствам. Удалите staticключевое слово и верните нужное значение.

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

    Редактировать:

    Если вы намеревались получить экземпляр dbvia a static method, необходимо объявить переменную как static.

    class App {
        protected static $db = 'hey';
        ...
    }
    
    class TestCase extends App {
        public static function test() {
            return parent::$db;
        }
    }
    
    echo TestCase::test(); // returns hey