PHP:从继承的类访问类属性

时间:2011-04-02 15:01:33

标签: php object

我正在尝试在构造函数中创建类属性,然后在扩展类中访问它们,但是遇到它们时遇到了麻烦。

这是我的设置,道歉,很多代码。

class Object {
    function __autoload($c){
        strtolower($c);
        include_once('lib/'.$c);
    }

    function  __construct() {

    }
}

class Rules extends Object{

    function __autoload(){
        include_once('lib/rules.php');
    }

    // Store our set of rules
    public static $consonant = '';
    public static $vowel = '';
    public static $other = '';

    function  __construct() {
        global $_CONF;

        // Store a set of rules, as we create them from the config
        $this->consonant = '/^[^'.$_CONF['vowels'].$_CONF['additional'].']+/';
        $this->vowel = '/['.$_CONF['vowels'].']+/';
        $this->other = '/^('.$_CONF['additional'].'+)(.*)/';
    }
}

这是我遇到麻烦的地方

class Translate extends Rules{

    function __autoload(){
        include_once('lib/translate.php');
    }

    function  __construct() {
        parent::__construct();
    }

    // etc, function()
    $return .= preg_replace(parent::$vowel, "$1$2'".$_CONF['vowelending'], $word);
}
  

警告:preg_replace()   [function.preg-replace]:清空常规   表达   d:\ XAMPP \ htdocs中\ PigLatin2 \ LIB \ translate.php   第45行

现在对我来说很明显,父类属性没有被正确读取。我已将其从parent::vowel更改为parent::$vowel并将其设为static,但仍未读取正确的值。

我是否需要在构造函数中实例化$rule = new Rules()的新副本?或者应该翻译自动加载,因为它正在扩展父级?

1 个答案:

答案 0 :(得分:0)

Translate班级中,parent::$vowel会引用Rules班级中的静态属性。

您的属性不是static,因此请改为使用$this->vowel