PHP: доступ к атрибутам класса из унаследованных классов - PullRequest
0 голосов
/ 02 апреля 2011

Я пытаюсь создать атрибуты класса в конструкторе, а затем получить к ним доступ в расширенном классе, но у меня возникают проблемы с их получением.

Вот мои настройки, извинения, много кода.

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 голосов
/ 02 апреля 2011

В вашем Translate классе parent::$vowel будет ссылаться на статический атрибут в Rules классе.

Ваши свойства не static, поэтому вы должны вместо этого использовать $this->vowel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...