2012-07-14 107 views
2

我不确定我是否失去它或什么。我最近在需要休息之后跳回到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中现在不推荐使用的特性?哦,时间如何变化......

我的总体目标是能够创建属于一组类的方法,这些方法可以在其他方法和类中的全局范围内调用。任何帮助都感激不尽。谢谢。

+0

你希望能够调用也从类实例化对象的方法(如'$ foo->的getTime();')或者你只是想使用该类作为某种名称空间? – 2012-07-14 05:55:10

+0

此代码适用于我,复制和粘贴。 – Ohgodwhy 2012-07-14 05:55:37

+0

@Ohgodwhy:'error_reporting(E_ALL);'。这应该给你至少一些警告。 – 2012-07-14 05:56:55

回答

5

即使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(); 
    } 
}