从子函数中在父构造函数中设置变量集

时间:2016-05-01 15:28:08

标签: php

关于这类问题已有很多线索,但出于某些原因我无法解决这个问题。

在TestClass :: test()中,$ db为NULL。

$ db值在App构造中设置,我试图从扩展类函数中恢复该值。 (所以我不需要每次都设置$ 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;
    }
}
?>

1 个答案:

答案 0 :(得分:0)

您忘记了this中的TestClass,静态方法无法访问非静态属性。删除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