我创建了一个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/Projects/PHP/tfm/template/header.php 的 在线 19
通知:试图获取财产 非对象的 /Users/aaronfalloon/Projects/PHP/tfm/template/header.php 的 在线 19
答案 0 :(得分:2)
使用$this->title
代替$page->title
,因为您引用了同一个实例的属性。
答案 1 :(得分:2)
让我进一步解释Gumbo所写的内容。
当您包含模板文件时,您在头函数中执行了WITHIN操作,从而使模板文件中的所有$ page变量引用头函数中的本地$ page变量,显然未声明/定义。 / p>
您应该使用$ this-&gt;标题来引用当前的类。
类似
class Page{
public function header(){
echo $this->title;
}
}
当您尝试包含模板文件时:
// page class
class Page{
public function header(){
include('template.php');
}
}
// template file
echo $this->title;
答案 2 :(得分:0)
我不确定,可以通过在global $page;
函数require_once
调用之前添加Page::header
来解决此问题。
require_once包含指定文件的代码并执行它以保持当前范围。在Page::header
函数中,$page
不可见。
答案 3 :(得分:0)
$page
被声明为全局,header.php代码只有该方法的局部范围。
或者:
在global $page
之前的方法声明后使用require_once
将$page
作为参数public function header($page)
传递到标题函数中
在header.php中使用echo $this->title
。
或者,如果您真的想要使用extract(get_object_vars($this))
和echo $title
。