drzyeetvt41077335 2009-02-03 03:04
浏览 69
已采纳

如何从扩展PHP类中的静态调用中获取类名?

I have two classes: Action and MyAction. The latter is declared as:

class MyAction extends Action {/* some methods here */}

All I need is method in the Action class (only in it, because there will be a lot of inherited classes, and I don’t want to implement this method in all of them), which will return classname from a static call. Here is what I’m talking about:

Class Action {
 function n(){/* something */}
}

And when I call it:

MyAction::n(); // it should return "MyAction"

But each declaration in the parent class has access only to the parent class __CLASS__ variable, which has the value “Action”.

Is there any possible way to do this?

  • 写回答

6条回答 默认 最新

  • dongzha5934 2009-02-03 03:16
    关注

    __CLASS__ always returns the name of the class in which it was used, so it's not much help with a static method. If the method wasn't static you could simply use get_class($this). e.g.

    class Action {
        public function n(){
            echo get_class($this);
        }
    
    }
    
    class MyAction extends Action {
    
    }
    
    $foo=new MyAction;
    
    $foo->n(); //displays 'MyAction'
    

    Late static bindings, available in PHP 5.3+

    Now that PHP 5.3 is released, you can use late static bindings, which let you resolve the target class for a static method call at runtime rather than when it is defined.

    While the feature does not introduce a new magic constant to tell you the classname you were called through, it does provide a new function, get_called_class() which can tell you the name of the class a static method was called in. Here's an example:

    Class Action {
        public static function n() {
            return get_called_class();
        }
    }
    
    
    class MyAction extends Action {
    
    }
    
    
    echo MyAction::n(); //displays MyAction
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部