“调用未定义的方法” - 但我知道它存在

时间:2010-07-12 04:08:47

标签: php

这行代码:

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);
    }
}

5 个答案:

答案 0 :(得分:3)

您正在实例化错误的Date课程。您可以使用PHP的get_class_methods()函数来确认哪些方法可用。

答案 1 :(得分:0)

php中有一个Date类。所以我猜你是在实例化错误的Date类。

将Card.php中Date类的名称更改为myDate;

然后再试一次$ this-&gt; date = new myDate;

看看它是如何运作的。

创建一个单独的文件进行测试,以删除可能导致混淆的任何其他内容

DC

忽略查尔斯不必要的downvote

另一种测试方法是进入Card.php并添加或修改Date的构造函数

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

然后在创建日期对象时打印,如果它没有打印,那么你知道你正在实例化一个不同的Date对象。

我经常使用的另一种方法是

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

如果它显示了不同的类结构,那么你期望再次有错误的Date对象

如果没有,那么请查看$ this-&gt;日期是否未在任何地方重新定义

e.g。

$this->date = new Date;

....

$this->date = new DateTime;

DC

答案 2 :(得分:0)

我知道这是一个老问题,但我只是在争论这个问题。

我正在使用Netbeans在远程服务器上进行编码,但事实证明,由于某种原因,它没有将文件同步到远程主机。

这特别令人烦恼,因为我可以按住Ctrl键单击该类并查看该方法,并且在同一个类中使用不同的方法将打开看似正确的文件。

发现问题后,我只需右键单击该文件,然后点击“上传”。

答案 3 :(得分:0)

如果您在自动将更改从IDE上传到Web服务器的设置中工作,则检查您的页面。可能不小心它没有上传文件。

答案 4 :(得分:0)

您还必须检查使用的命名空间。您可以拥有两个具有相同名称的类,但来自不同的名称空间。如果在同一名称空间中创建了两个具有相同名称的类。然后构建或访问的类将取决于它们被解释的顺序。

同样关于那些日期问题。如果要访问核心命名空间,请参考

new \ DateTime();

而不是新的DateTime();