2010-07-12 64 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();

相关问题