2010-07-12 61 views
3

這行代碼:「調用未定義的方法」 - 但我知道它的存在

echo "<strong> {$this->author->last} {$this->date->shortYear()}</strong> ..."; 

給了我這個錯誤:

Fatal error: Call to undefined method Date::shortYear() in /f5/debate/public/libs/Card.php on line 22 

即使在Date.php(包含在Card.php):

class Date { 
    public $day; 
    public $month; 
    public $year; 

    public function shortYear() { 
     return substr($this->year, -2); 
    } 
} 
+2

請注意,請檢查您是否正在加載「Date.php」文件。 – BoltClock 2010-07-12 04:13:46

+0

我知道我是因爲我在第16行(「$ this-> date = new Date;」)定義了一個日期而沒有任何錯誤。 – cactusbin 2010-07-12 04:16:16

+0

我們可以看到Card.php的全部內容嗎? – Kalium 2010-07-12 04:23:32

回答

0

在php中有一個Date類。所以我的猜測是你正在實例化錯誤的Date類。

將Card.php中Date類的名稱更改爲myDate;

然後再試一次$ this-> date = new myDate;

看看如何工作。

創建一個單獨的文件來進行測試,以消除任何其他的東西,可能會造成混亂

DC

忽略查爾斯不必要downvote

另一種方法來測試,這是進入Card.php並添加或修改構造函數的日期

function __construct() { 
     echo "created date object\n"; 
}  

然後,如果它不創建p時創建日期對象,然後你知道你正在實例化一個不同的Date對象。

我經常使用的另一種方法是

$this->date = new Date; 
var_dump($this->date); 

如果它顯示了一個不同的充類結構,那麼你又懷孕了,那麼你有錯Date對象

如果沒有,那麼看看,如果$這個 - >日期不是重新定義的任何地方

eg

$this->date = new Date; 

.... 

$this->date = new DateTime; 

DC

+2

PHP日期類叫做DateTime,而不是Date。 – Charles 2010-07-12 04:40:32

+0

Pear :: Date實際上http://pear.php.net/manual/en/package.datetime.date.examples.php感謝沒有根據的downvote,即使PHP中沒有Date類,它也是一個有效的測試方法it – DeveloperChris 2010-07-12 04:43:12

+1

Charles的觀點是:「PHP中有一個Date類」與「PEAR中有一個Date類」不同。 – BoltClock 2010-07-12 04:44:51

3

你實例錯誤Date類。您可以使用PHP的get_class_methods()函數來確認哪些方法可用。

0

我知道這是一個古老的問題,但我只是與這一點作鬥爭。

我正在使用Netbeans在遠程服務器上編碼,事實證明,由於某種原因,它沒有將文件同步到遠程主機。

這特別令人討厭,因爲我可以按住Ctrl鍵並點擊該類並查看該方法,並且在同一個類中進入不同的方法將打開看似正確的文件。

當我發現問題後,我只需右鍵單擊該文件並單擊「上傳」。「

0

如果您在安裝,你會自動從你的IDE將更改上傳到您的檢查你的網頁的Web服務器的工作。它可能意外的是它沒有上傳文件。

+0

在回答上述問題時無法理解你想說的是什麼? – 2013-09-20 09:41:49

+0

這是如何涉及到的問題? – Narendra 2013-09-20 09:52:17

+0

如果您沒有上傳新編寫的函數,解釋器很可能找不到它。這就是它的關係。剛剛發生了這個錯誤,並將我的腦袋打了幾分鐘,直到我想我的IDE可能沒有上傳我的更改。這是... – 2013-10-05 18:34:04

0

您還必須檢查所使用的命名空間。您可以擁有兩個具有相同名稱的類,但來自不同的名稱空間。如果兩個類在相同的名稱空間中創建,並且名稱相同。那麼構造或訪問哪個類將取決於它們被解釋的順序。

而且對於這些日期的問題。如果你想訪問核心命名空間,你會參考

new \ DateTime();

代替新的DateTime();

相關問題