![](/img/trans.png)
[英]PHP5.3: “Call to undefined method” error when calling invoke from class variable
[英]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.