Noob PHP ООП Вопросы: Конструкторы и фигурные скобки - PullRequest
1 голос
/ 06 марта 2012

Я пытаюсь выучить ООП и задать несколько вопросов. Я прочитал первые несколько глав в PHP Objects, Patterns and Practice , а также следующие посты; Nettuts + , PHP Freaks и PHPRO .

  1. В дочернем классе должен ли конструктор перечислять переменные, которые уже существуют в родительском классе?
  2. Когда я получаю свойство в моих методах (или других местах), зачем мне заключать значения в фигурные скобки (т. Е. {$ This-> id})? *
  3. Кроме того, если у кого-то есть какой-либо совет (например, что я делаю неправильно), я открыт для любой критики.

class Element {
  public $tag;
  public $id;

  function __construct( $tag, $id ) {
    $this->tag = $tag;
    $this->id = $id;
  }

  public function getAttributes()  {
    return "id='{$this->id}'";
  }
}


class NormalElement extends Element {
  public $text;

  function __construct( $tag, $id, $text ) {
    parent::__construct( $tag, $id );
    $this->text = $text;
  }

  public function getElement() {
    return "<{$this->tag}>{$this->text}</{$this->tag}>";
  }
}

class VoidElement extends Element {

  function __construct( $tag, $id ) {
    parent::__construct( $tag, $id );
  }

  public function getElement() {
    return "<{$this->tag} " . parent::getAttributes() . " />";
  }
}

Я потратил некоторое время, пытаясь заставить мой код правильно отображаться в этом посте, но он продолжает ломаться.

Ответы [ 2 ]

3 голосов
/ 06 марта 2012
  1. Нет. Вы можете вызвать конструктор родительского класса. Однако если вам нужно принять эти значения в качестве аргументов, вам понадобятся дополнительные параметры для конструктора дочернего класса
  2. Когда вы записываете значение в строку и используете оператор ->, вам нужно заключить его в фигурные скобки, чтобы PHP знал, что вы говорите о члене, а не $this сам.
2 голосов
/ 06 марта 2012

2) Поскольку php прекращает синтаксический анализ переменных, встроенных в строки в кавычках, когда он достигает символа, недопустимого для использования в имени переменной (в данном случае '-'). Затем предполагается, что - это просто часть строкового литерала. Если, конечно, вы не заверните его в фигурные скобки.

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