【问题标题】:Undefined variable after using require_once使用 require_once 后未定义的变量
【发布时间】:2012-12-25 09:47:53
【问题描述】:

我创建了一个 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

【问题讨论】:

  • 很难诊断出我们都没有见过的课程。向我们展示你的课堂上发生了什么。

标签: php


【解决方案1】:

让我进一步解释一下 Gumbo 所写的内容。

当您包含模板文件时,您在标头函数中进行了操作,从而使模板文件中的所有 $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】:

    使用$this-&gt;title 而不是$page-&gt;title,因为您引用的是同一个实例的属性。

    【讨论】:

      【解决方案3】:

      我不确定,可以通过在Page::header 函数中的require_once 调用之前添加global $page; 来解决此问题。

      require_once 包含指定文件的代码并在当前范围内执行它。在您的 Page::header 函数中,$page 不可见。

      【讨论】:

        【解决方案4】:

        $page 被声明为全局,并且 header.php 代码仅具有该方法的本地范围。

        要么: 在require_once之前的方法声明之后使用global $page
        $page 作为参数public function header($page) 传递到标头函数中。
        在 header.php 中使用echo $this-&gt;title

        或者,如果您真的想搞砸,请使用 extract(get_object_vars($this))echo $title

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-15
          • 2012-11-16
          • 2022-09-27
          相关资源
          最近更新 更多