Переменная PHP из расширенного класса - PullRequest
0 голосов
/ 01 сентября 2009

Я пытаюсь получить переменную из расширенного класса. Вот так выглядит мой основной класс:

class SS {
    public $NONE = NULL;
    public $NUMBERS = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
    public $OPERATORS = array("=", "&&", ">", "<", "+", "-", "/", "*", "^");
    public $DBLQUOTES = '"$1"';
    public $SNGQUOTES = "'$1'";
    public $CODE;

    function SuperSyn($sCode, $cLang) {         
        $hLang = new VB6;
        $VB6 = $hLang->__construct();
        echo $VB6->ssAuthor;
    }
}

И мой расширенный класс выглядит так (я удалил многие ключевые слова).

class VB6 extends SS {
    public function __construct() {
        $ssAuthor = "James Brooks";
        $ssCSS = "languages/vb6.css";
        $ssNumbers = $NUMBERS;
        $ssKeywords = array("Abs", "Access", "AddItem");
        $ssReserved = $NONE;
        $ssComments = "('.+)";
        $ssOperators = $OPERATORS;
        $ssDoubleQuote = $NONE;
        $ssSingleQuote = $NONE;
    }
}

Если я удаляю вызываемую публичную функцию __construct, PHP сукает, что она ожидает функцию.

У меня вопрос: как я могу получить переменную из расширенного класса в свой основной класс?

Ответы [ 4 ]

1 голос
/ 01 сентября 2009

Конструктор будет вызываться для вас при создании объекта, поэтому это должно работать:

function SuperSyn($sCode, $cLang) {                     
     $hLang = new VB6(); //I think you need some parameters here
     echo $VhLang->ssAuthor;
}

Однако в конструкторе VB6 вы в настоящее время назначаете только локальные переменные, поэтому вы не сможете получить доступ к ssAuthor извне. Вместо этого вы, вероятно, хотите сделать что-то вроде:

class VB6 extends SS {
    public $ssAuthor;

    public function __construct() {
        $this->ssAuthor = "James Brooks";
        //etc.
    }
}
1 голос
/ 01 сентября 2009

Используйте родительское ключевое слово php.

PHP родительский

0 голосов
/ 01 сентября 2009

используйте parent:: или $this-> (зависит, то есть у вас есть две переменные с одинаковым именем)

0 голосов
/ 01 сентября 2009

Я думаю, что есть логическая проблема с вашим ожиданием. Почему функция класса SS должна знать о переменной, которая существует только в подклассе VB6?

Это не будет чистым наследованием и выявляет проблему с вашими классами.

Есть два варианта решения:

  • Поместите переменную в основной класс, чтобы использовать ее в функции этого класса
  • Поместите функцию, используя переменную подкласса внутри подкласса

(Прочитав комментарии о родительском ключевом слове и переменной «$ this»: я понял вопрос по-другому и не думаю, что какой-либо из них поможет, поскольку требуется обратное направление: функция родительского класса> переменная подкласса, функция подкласса> переменная родительского класса)

...