2009-09-22 6 views
1

J'ai commencé à développer un peu mvc framweork sur PHP5.3.0 pour le mot-clé statique, mais depuis que je suis ici, j'ai dit que je devrais profiter des espaces de noms.Inclure le fichier de vue dans le même espace de noms dans PHP 5.3.0

J'ai donc quelque chose comme ça pour la vue:

namespace view 
{ 
    function load($filepath) 
    { 
     include($filepath); 
    } 
    function helper() 
    { 
     echo 'lorem ipsum'; 
    } 
} 
view\load('view.php'); 

Maintenant, disons que mon view.php ressemble à ceci:

<?= helper() ?> 

Il ne fonctionne pas, becuase le fichier inclus est pour une raison quelconque dans l'espace de noms global, donc j'ai dû écrire view \ helper() dans la vue, ce qui va à l'encontre du but.

Avez-vous une idée de la façon d'accomplir cela? À peu près ce que le titre de la question est, d'inclure un fichier dans le même espace de noms où l'inclusion est en cours.

Veuillez noter que je n'ai pas besoin de solutions pour ce scénario de code EXACT, il a été simplifié pour que vous compreniez mon problème.

Répondre

3

Je dois avouer que je n'ai pas encore étudié en détail les fonctionnalités de l'espace de noms de PHP, mais je ne crois pas que ce soit possible. Le fichier included() sera dans l'espace de noms global, sauf si vous déclarez que view.php est dans le même espace:

namespace view; 
helper(); // works 

Notez que l'importation helper utilisant use view\helper;is not possible either que l'importation ne fonctionne que des noms de classe et d'autres espaces de noms.

EDIT: Appel include() à partir d'une fonction sera encore exporter le champ actuel du fichier inclus, de sorte que vous pouvez faire quelque chose comme ceci:

namespace view { 
    class Template { 
     public function load($filepath) { 
      include($filepath); 
     } 

     function helper(){ 
      echo 'lorem ipsum'; 
     } 
    } 

    $a = new Template(); 
    $a->load('test.php'); 
} 

view.php:

$this->helper(); 
0

Je mettrais en œuvre des classes de chargement automatique au lieu de les charger avec la méthode "load". Aussi, je ne vois pas pourquoi vous ne pouvez pas mettre tous les fichiers view.php dans le même espace de noms.

Questions connexes