从子函数在父构造函数中设置的访问变量

There are already many threads about this kind of problem, but for some reason i can't get it to work.

In TestClass::test(), $db is NULL.

The $db value is set in App construct and I'm trying to recover that value from an extended class function. (so i don't need to set $db everytime everywhere).

Some help would be greatly appreciated, thanks.

File : index.php

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

File : App.class.php

<?php
class App {
    protected $db;

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

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

File : TestClass.class.php

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

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

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

You forgot a this in your TestClass and a static method cannot access non-static properties. Remove the static keyword and return the right value.

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

Edit:

If you meant to retrieve the instance of the db via a static method you must declare the variable as static.

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

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

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