簡體   English   中英

調用類方法時,php未定義變量錯誤

[英]php undefined variable error when calling class method

我已經寫了多年的程序性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包含在index.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則稱為top。

謝謝

將其添加到腳本的頂部

$menu = new Menu($dbHandle);

這不是班級的工作方式。 你不能引用整個類, Menu ,用變量$Menu ,調用實例方法。

您需要創建一個類的實例來調用方法:

$menu = new Menu(...);

您可以創建在類本身上調用的類級“靜態”方法,但該語法不涉及$Menu 你可以使用Menu::method_name()

您正在調用$ Menu->所以您調用的是一個名為Menu的變量,而不是類Menu。 無論如何,該函數不是靜態的,因此您需要實例化一個對象。

為此,添加一行:

 $menu = new Menu($db);

其中$ db是你的數據庫對象,如果你真的需要它,或者如果你不這樣做是null(我不能用那個代碼片段說)

然后打電話

$menu->menuFramework(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM