2010-08-03 7 views
1

Je suis plutôt nouveau à ZendFramework et j'essaie de comprendre cela. Dans mon script de vue (de index.phtml), j'ai ce petit morceau de code qui dit:Zend Framework vue script, les fonctions et la portée variable

<?php 

function getErrorString($element) 
{ 
echo "<pre>"; 
print_r($this); 
echo "</pre>"; 

$string = ''; 
if(!empty($this->error[$element])) 
{ 
    $string = $string.'<label class="error" for="'.$element.'" generated="true">'; 
    foreach($this->error[$element] as $error) 
    { 
    $string = $string.$error; 
    } 
    $string = $string.'</label>'; 
} 
return $string; 
} 

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 
getErrorString("blah"); 
die(); 

Cela me donne:

Fatal error: Using $this when not in object context in index.phtml on line XX 

Il me semble que lorsque vous créez une fonction dans une vue , vous perdez $ cette variable. J'ai fait des recherches autour du net, et je ne vois personne d'autre qui essaie de réaliser ce que je fais (très improbable, peut-être que je me trompe). Avec l'expérience du développement d'autres applications, je ne vois pas pourquoi cette fonction devrait être placée dans une aide séparée - d'autant plus que c'est le seul endroit où la fonction sera appelée.

Toutes les idées seraient grandement appréciées.

Répondre

2

Votre fonction getErrorString() n'est pas une méthode object de l'objet Zend_View. Il a sa propre portée et n'a pas pu atteindre $ this.

Le code suivant devrait travailler pour vous dans le index.phtml

function getErrorString($viewObject, $element) 
{ 
echo "<pre>"; 
print_r($viewObject); 
echo "</pre>"; 

$string = ''; 
if(!empty($viewObject->error[$element])) 
{ 
    $string = $string.'<label class="error" for="'.$element.'" generated="true">'; 
    foreach($viewObject->error[$element] as $error) 
    { 
    $string = $string.$error; 
    } 
    $string = $string.'</label>'; 
} 
return $string; 
} 

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 
getErrorString($this,"blah"); 
die(); 
0

La dernière utilisation de la variable "$this" est probablement la principale raison de l'erreur fatale. Il est tout à fait justifié en raison du fait que vous ne pouvez pas écrire autre chose dans la définition de la classe, sauf la définition des méthodes & propriétés par rapport à cette classe.

Si vous créez une fonction dans une page de vue, la variable "$this" n'est pas accessible par défaut dans cette fonction. Vous devrez donc faire en sorte que la variable "$this" devienne globale ou vous devez imprimer la partie requise, liée à la variable "$ this", en dehors de la définition de la fonction.

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 

Ainsi, lorsque vous écrivez le code ci-dessus dans la définition de la fonction, le PHP Parser est incapable de trouver un contexte d'objet pour cette variable « $this ». Ce n'est pas que vous perdez cette variable "$ this", mais elle ne sera pas accessible, mais à la logique manquante.

Espérons que ça aide.

+0

Merci pour la réponse rapide KC! Je ne suis pas sûr de comprendre ce que vous voulez dire. Vous avez dit que vous ne pouvez rien écrire d'autre dans la définition de classe, mais vous avez ensuite dit que vous êtes autorisé à définir des méthodes? En outre, je ne vois pas pourquoi cela va imprimer _ $ (ceci) fonctionnerait, mais getErrorString ("blah") ne fonctionnerait pas. À la votre! – lyf

+0

@lyf - Puisque votre définition de fonction n'est pas liée dans une définition de classe, l'utilisation de "$ this" dans la définition de la fonction ne fonctionnera pas. –

Questions connexes