实例化类方法而不实例化PHP中的类不再可能?
问题描述:
我不确定我是否失去它或什么。我最近在需要休息之后跳回到PHP中,我试图做一些我一直能够做的事情:调用公共类方法而不实例化类。例如:实例化类方法而不实例化PHP中的类不再可能?
class Utils
{
public function getTime()
{
return time();
}
}
$time = Utils::getTime();
echo $time;
我以前做这一切的时候(大约两三年前),但跳跃到PHP 5.3,我成立了一个新的沙箱环境之后,我不断收到
Fatal error: Call to undefined function getTime() in /mnt/richard/index.php on line 24
我在这里错过了一些愚蠢的东西吗?或者是在没有类实例化的情况下使用公共类方法,这是PHP中现在不推荐使用的特性?哦,时间如何变化......
我的总体目标是能够创建属于一组类的方法,这些方法可以在其他方法和类中的全局范围内调用。任何帮助都感激不尽。谢谢。
答
即使PHP允许您这样做,您也不应该将实例方法作为类上的静态方法调用。当调用时:
Utils::getTime();
您正在调用静态上下文中的实例方法。你应该定义getTime
这样,而不是:
class Utils
{
public static function getTime()
{
// You can't use $this in here. This is a static function. No instance exists.
return time();
}
}
你希望能够调用也从类实例化对象的方法(如'$ foo->的getTime();')或者你只是想使用该类作为某种名称空间? – 2012-07-14 05:55:10
此代码适用于我,复制和粘贴。 – Ohgodwhy 2012-07-14 05:55:37
@Ohgodwhy:'error_reporting(E_ALL);'。这应该给你至少一些警告。 – 2012-07-14 05:56:55