__CLASS__总是返回使用它的类的名称,因此它对静态方法没有多大帮助。如果方法不是静态的,你可以简单地使用
get_class($ this)。例如
class Action {
public function n(){
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo=new MyAction;
$foo->n(); //displays 'MyAction'
后期静态绑定,在PHP 5.3中可用
现在PHP 5.3发布了,你可以使用late static bindings,它允许你在运行时解析一个静态方法调用的目标类,而不是定义它。
虽然该特性没有引入一个新的魔术常量来告诉你通过调用的类名,它提供了一个新的函数,get_called_class()它可以告诉你一个静态方法被调用的类的名称。这里有一个例子:
Class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); //displays MyAction