3 votes

Variable $this dans Zend Layout

Je parcourais des tutoriels et de la documentation sur le framework zend, la plupart des choses avaient un sens jusqu'à ce que je tombe sur $this variable dans /application/layout/scripts/layout.phtml il a été mentionné que $this est une instance de l'objet vue qui a été créé lors de l'amorçage.

à ma connaissance, vous ne pouvez pas utiliser $this comme nom de variable car $this est un mot-clé réservé à php utilisé pour faire référence au même objet dans le contexte de la classe. Toute tentative de l'utiliser comme variable entraînera une erreur fatale avec le message d'erreur suivant Fatal error: Cannot re-assign $this et selon la déclaration de l'auteur There is a variable, $this, available which is an instance of the view object Je n'arrive pas à comprendre la théorie qui se cache derrière tout cela. $this est utilisé en dehors du contexte de la classe ?

6voto

Corbin Points 17420

Il est en fait utilisé dans le contexte d'un objet. Vous devriez examiner le code vous-même, mais l'idée de base derrière render() (qui est la méthode toString par procuration) :

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 le fait de manière un peu plus complexe, ce qui le rend un peu plus flexible, mais c'est l'idée de base.

Ensuite, dans le viewScript, il est techniquement à l'intérieur de la méthode render() comme si le code était littéralement dans cet endroit "include ...". (En simplifiant à l'extrême, mais l'idée générale tient la route).

3voto

rjz Points 9046

C'est probablement utilisé sur le contexte de la classe. Imaginez que la vue soit créée de la manière suivante :

class View {

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

    echo $view_data;
  }
}

Le processus de présentation de la vue est probablement plus complexe que la simple saisie d'une include d view file, mais vous pouvez voir comment $this serait disponible pour la vue lorsque View::render() s'appelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X