2009-09-22 1 views
1

Я начал разрабатывать своего рода mvc framweork на PHP5.3.0 для статического ключевого слова, но так как я здесь, я сказал, что должен также использовать пространства имен.Включить файл просмотра в пределах одного и того же пространства имен в PHP 5.3.0

Так что у меня что-то вроде этого для представления:

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

Теперь предположим, что мой view.php выглядит следующим образом:

<?= helper() ?> 

Это не работает, becuase включаемый файл для по какой-то причине в глобальном пространстве имен, поэтому мне пришлось писать view \ helper() внутри представления, что поражает цель.

У вас есть идеи, как это сделать? В основном, что такое заголовок вопроса, включить файл в том же пространстве имен, в котором происходит включение.

Обратите внимание, что мне не нужны решения для этого сценария EXACT, это было упрощено для понимания моей проблемы.

ответ

3

Должен признаться, что мне еще предстоит подробно изучить возможности пространства имен PHP, но я не думаю, что это возможно. Файл included() будет в глобальном пространстве имен, если вы не объявить, что view.php находится в том же пространстве имен:

namespace view; 
helper(); // works 

Обратите внимание, что импортирование helper с использованием use view\helper;is not possible either, импортирующих только работает имен классов и других пространств имен.

EDIT: Вызов include() из функции по-прежнему будет экспортировать текущий объем для включаемого файла, так что вы могли бы сделать что-то вроде этого:

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

Я бы использовал классы автозагрузки вместо загрузки с помощью метода «load». Также я не понимаю, почему вы не можете поместить все файлы view.php в одно и то же пространство имен.

Смежные вопросы