这行代码:
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);
}
}
答案 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();