【问题标题】:php undefined variable error when calling class method调用类方法时php未定义变量错误
【发布时间】:2013-12-21 21:32:27
【问题描述】:

我多年来一直在编写程序 php,并且对它非常满意。最近我决定重新设计一个现有站点并切换到 PDO 和 OOP。每个人都告诉我这是一个更好的方法,但学习曲线让我很生气。尝试调用课程时,我得到以下信息。

菜单生成器

vbls: 5 1

注意:未定义变量:第 9 行 /home/lance/DallyPost/projectWebSite/trunk/1/core/modules/menuBuilder.php 中的菜单

致命错误:在第 9 行的 /home/lance/DallyPost/projectWebSite/trunk/1/core/modules/menuBuilder.php 中的非对象上调用成员函数 menuFramework()

过程是我在index.php的顶部包含了menu.php,在包含以下脚本之前:

<?php
//menuBuilder.php
echo"<h2>$pageTitle</h2>";
$pub = $_URI_KEY['PUB'];
$dir = $_URI_KEY['DIRECTORY'];

echo"vbls: $pub $dir";

if($Menu->menuFramework("$pub", "$dir") === false) {
    echo"The base menu framework failed to build correctly.";
}
else{
    echo"<p>The base menu framework has been successfully constructed.</p>";
}
?>

如你所见,上面的脚本调用了Menu类中的一个方法:

<?php
//menu.php
class Menu{
    private $db; 
    public function __construct($database) {
        $this->db = $database;
    }

    public function menuFramework($pub, $directory){
        $link = "/" . $directory . "/index.php/" . $pub . "/home/0/Home-Page/";
        $inc = "core/menus/" . $pub . "category.php";
        $file = "core/menus/" . $pub . "menuFramework.php";
    
        $text = "<nav class=\"top-bar\" data-topbar>";
        $text .= "<ul class=\"title-area\">";
        $text .= "<li class=\"name\">";
        $text .= "<h1><a href=\"$link\">Home Page</a></h1>";
        $text .= "</li>";
        $text .= "</ul>";
        $text .= "include($inc)";
        $text .= "</nav>";
    
        //write text to a file
        if(file_put_contents($file, $text)){
            return true;
        }
        else{
            return false;
        }
    }
    ... rest of file not shown

你能帮我理解为什么我会收到这个错误吗?我的理解是,当我包含 menu.php 时,该变量已经或应该已经定义,之前已经完成,如果 index.php 被称为顶部

谢谢

【问题讨论】:

  • 当你说“我的理解是当我包含 menu.php 时变量已经或应该已经定义”我猜你会解决这个问题,但你会得到很多其他问题。我建议您阅读一些有关 OOP 的一般教程,然后阅读有关 php 中的 OOP 的教程。包含一个类文件什么都不做,只是告诉系统在哪里可以找到该类。但在那之后,如果你想使用一个对象,你必须实例化它。这是有道理的,因为您可能需要多个对象,这就是您创建一个类的原因,因此您有一种方法来封装功能

标签: php class oop variables undefined


【解决方案1】:

在脚本顶部添加这个

$menu = new Menu($dbHandle);

【讨论】:

  • 您必须自动加载该类或 require_once,以便所有代码都可以在您的代码中使用。 $Menu = 新菜单($dbHandle); $Menu 和 $menu 都不同。
  • 是的,没错,我什至戴了眼镜,眼睛有问题
【解决方案2】:

课程不是这样运作的。您不能使用变量 $Menu 引用整个类 Menu 来调用实例方法。

你需要为你的类创建一个实例来调用方法:

$menu = new Menu(...);

您可以创建在类本身上调用的类级“静态”方法,但该语法不涉及$Menu。你可以使用Menu::method_name()

【讨论】:

    【解决方案3】:

    你正在调用 $Menu-> 所以你是一个调用一个名为 Menu 的变量,而不是类 Menu。 无论如何,那个函数不是静态的,所以你需要实例化一个对象。

    为此,添加一行:

     $menu = new Menu($db);
    

    如果你真的需要它,$db 是你的数据库对象,如果你不需要它,则为 null(我不能用那个代码片段说)

    然后调用

    $menu->menuFramework(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2011-06-16
      • 2015-05-13
      • 2011-12-06
      相关资源
      最近更新 更多