Передача объекта во включенный файл oop php - PullRequest
2 голосов
/ 03 ноября 2011

Я занимаюсь разработкой cms и хочу, чтобы дизайнер мог вызывать весь контент, используя объект с именем $ view.Моя проблема в том, что включенный файл шаблона больше не может получить доступ к объекту $ view.

Объект представления содержит такие вещи, как page_title (), ... и т. Д. Я также работаю с шаблонами, поэтому я хочуконструктор, чтобы иметь возможность вызывать правильный шаблон, получая доступ к объекту $ view.

Некоторый код для резервного копирования моего объяснения:

Моя библиотека:

class view {
    function page_title() {}

    function template() {
       $this->template = new template;
       $this->template_include = $this->template->template_include();
    }
}

class template {
    function template_include(){
       include('template.php');
    }
}

Мой индекс-файл:

$view = new view;
$view->template();

Мой template.php:

$view->page_title();

Но я столкнулся с проблемой: объект представления создается с помощью метода из класса представления, вызываемого для объекта, который с помощью метода template_include () включает в себя правильный шаблон.PHP.В этом шаблоне я снова использую объект просмотра, чтобы вызвать правильные заголовки, контент, ... Моя проблема в том, что включенный файл шаблона больше не может получить доступ к объекту $ view.

Полагаю, вы все знаете об ошибке: Неустранимая ошибка: вызов функции-члена field_title () для необъекта

Я посвятил себя тому, чтобы сделать этот CMS настолько простым, насколько это возможно для дизайнера./ user, поэтому я хочу, чтобы объект просмотра вызывал все, без дополнительных включений в файл шаблона и т. д. *

Спасибо!

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

Вы можете передать $view в метод / класс

Индекс

 $view = new view;
 $view->template($view);

Классы

 class view {
    function page_title() { echo "this works!!!";}

    function template($view) {
       $this->template = new template;
       $this->template_include = $this->template->template_include($view);
    }
}

class template {
    function template_include($view){
       include('template.php');
    }
}
0 голосов
/ 03 ноября 2011

Если вы включаете файл шаблона в функцию, содержимое этого файла интерпретируется как область действия этой функции.Лучший способ решить эту проблему - передать в эту функцию ассоциативный массив с переменными, которые вы хотите иметь в этой области, например:

class view {
    function page_title() {}

    function template(array $variables) {
       $this->template = new template;
       $this->template_include = $this->template->template_include($variables);
    }
}

class template {
    function template_include(array $variables){
        if($variables){
            extract($variables);
        }
        include('template.php');
    }
}

Теперь, вызывая его следующим образом, вы получите доступ к $view и $title переменные внутри вашего шаблона:

$view = new view;
$vars = array(
    'view' => $view,
    'title' => 'some title'
);
$view->template($vars);
0 голосов
/ 03 ноября 2011

Вы пытались глобально объявить объект $ view?

Поместите global $view; как в index.php, так и template.php, надеюсь, это решит вашу проблему!

...