Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the classname from a static call in an extended PHP class?

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?

like image 520
Anton Avatar asked Feb 03 '09 11:02

Anton


People also ask

How would you call a static method from outside a class in PHP?

To add a static method to the class, static keyword is used. They can be invoked directly outside the class by using scope resolution operator (::) as follows: MyClass::test();

Can you use a class name to call a static method?

Calling a Static Method Note that using the class name for calling static methods is recommended but not mandatory. Java syntax allows calling static methods from an instance. For example, we could create this code and it would compile and run correctly: public static void main(String args) {

Can we extend static class in PHP?

You can used get_called_class() to get the class name of the class you are calling, even if it is static. You don't have to declare it anywhere. Therefore you don't have to declare any variables.

What is ClassName class in PHP?

Since PHP 5.5, the class keyword is also used for class name resolution. You can get a string containing the fully qualified name of the ClassName class by using ClassName::class. This is particularly useful with namespaced classes.


1 Answers

__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 
like image 96
Paul Dixon Avatar answered Sep 23 '22 12:09

Paul Dixon