$ эта переменная в Zend Layout - PullRequest
3 голосов
/ 04 марта 2012

Я просматривал учебник и документацию по Zend Framework, большинство вещей имело смысл, пока я не наткнулся на переменную $this в /application/layout/scripts/layout.phtml, было упомянуто, что $this является экземпляром созданного объекта представленияво время начальной загрузки.

Насколько мне известно, вы не можете использовать $this в качестве имени переменной, так как $this является зарезервированным ключевым словом для php, используемым для ссылки на тот же объект в контексте класса.любая попытка использовать его в качестве переменной приведет к фатальной ошибке со следующим сообщением об ошибке Fatal error: Cannot re-assign $this, и согласно утверждению автора There is a variable, $this, available which is an instance of the view object я не могу понять теорию, стоящую за этим.почему $this используется вне контекста класса?

Ответы [ 2 ]

6 голосов
/ 04 марта 2012

Это на самом деле используется в контексте объекта.Вы должны посмотреть на код самостоятельно, но основная идея метода render () (который является методом toString через прокси):

public function render()
{
    //Start output buffering
    ob_start();
    include $this->viewScript;
    //Get the content from the include
    $content = ob_get_flush();
    return $content;
}

Zend Framework делает это немного сложнее, чтобы сделать его немного более гибкимчем это, но это основная идея.

Затем, внутри viewScript, это технически внутри метода render (), как если бы код находился буквально в том месте "include ...".(Это слишком упрощенно, но общая идея верна.)

3 голосов
/ 04 марта 2012

Вероятно, он используется в контексте класса.Представьте, что создаваемое представление выглядит следующим образом:

class View {

  public function render($viewfile = 'views/myviewfile.phtml') {
    ob_start();
      include($viewfile);
      $view_data = ob_get_contents();
    ob_end_clean();

    echo $view_data;
  }
}

Процесс представления представления, вероятно, сложнее, чем просто захват файла представления include d, но вы можете видеть, как $this будет доступнопредставление, когда View::render() вызывается.

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