Неопределенная переменная после использования require_once - PullRequest
2 голосов
/ 26 декабря 2009

Я создал класс Page, и все страницы на моем веб-сайте являются объектами этого класса Page. Каждый объект Page имеет атрибут title, который передается конструктору в качестве аргумента, поэтому создание нового объекта Page выглядит следующим образом.

<?php

require_once('library/Page.php');

$page = new Page('About');

$page->header();

Здесь возникает проблема.

Метод header () - это ...

public function header()
{   

    require_once($this->templatePath . 'header.php');

}

Затем я повторяю заголовок страницы, используя

<?php echo $page->title; ?>

Однако я получаю следующую ошибку.


Примечание : не определено переменная: страница в / Users / aaronfalloon / Проекты / PHP / МТФ / шаблон / header.php на линии 19

Уведомление : Попытка получить собственность необъекта в / Users / aaronfalloon / Проекты / PHP / МТФ / шаблон / header.php на линии 19

Ответы [ 4 ]

2 голосов
/ 26 декабря 2009

Позвольте мне подробнее объяснить, что написал Гамбо.

Когда вы включили файл шаблона, вы выполнили операцию WITHIN в функции заголовка, тем самым сделав всю переменную $ page в файле шаблона ссылкой на локальную переменную $ page в функции заголовка, которая, очевидно, не объявлена ​​/ не определена.

Вместо этого вы должны использовать $ this-> title для ссылки на текущий класс.

Это что-то вроде

class Page{

  public function header(){
    echo $this->title;
  }

}

при попытке включить файл шаблона:

// page class
class Page{

  public function header(){
    include('template.php');
  }

}

.

// template file
echo $this->title;
2 голосов
/ 26 декабря 2009

Используйте $this->title вместо $page->title, так как вы ссылаетесь на свойство того же экземпляра.

0 голосов
/ 26 декабря 2009

$page объявлен как глобальный, а код header.php имеет только локальную область видимости для метода.

Либо: Используйте global $page после объявления метода перед require_once.
Передайте $page в функцию заголовка в качестве аргумента public function header($page).
Используйте echo $this->title в header.php.

Или, если вы действительно хотите облажаться, используйте extract(get_object_vars($this)) и echo $title.

0 голосов
/ 26 декабря 2009

Я не уверен, что возможно решить эту проблему, добавив global $page; перед вызовом require_once в вашей функции Page::header.

require_once включает код указанного файла и выполняет его, сохраняя текущую область видимости. В вашей функции Page::header $page не отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...