Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find out if a method exists in a static class

Tags:

object

php

static

I want to check is a function exists in a library that I am creating, which is static. I've seen function and method_exists, but haven't found a way that allows me to call them in a relative context. Here is a better example:

class myClass{     function test1()     {         if(method_exists("myClass", "test1"))         {             echo "Hi";         }     }     function test2()     {         if(method_exists($this, "test2"))         {             echo "Hi";         }     }     function test3()     {         if(method_exists(self, "test3"))         {             echo "Hi";         }     } } // Echos Hi myClass::test1(); // Trys to use 'self' as a string instead of a constant myClass::test3(); // Echos Hi $obj = new myClass; $obj->test2(); 

I need to be able to make test 3 echo Hi if the function exists, without needing to take it out of static context. Given the keyword for accessing the class should be 'self', as $this is for assigned classes.

like image 763
Tyler Carter Avatar asked Jul 20 '09 23:07

Tyler Carter


People also ask

Do static methods have this?

Since the static methods doesn't have (belong to) any instance you cannot use the "this" reference within a static method.


2 Answers

static::class is available since PHP 5.5, and will return the "Late Static Binding" class name:

class myClass {     public static function test()     {         echo static::class.'::test()';     } }  class subClass extends myClass {}  subClass::test() // should print "subClass::test()" 

get_called_class() does the same, and was introduced in PHP 5.3

class myClass {     public static function test()     {         echo get_called_class().'::test()';     } }  class subClass extends myClass {}  subClass::test() // should print "subClass::test()" 

The get_class() function, which as of php 5.0.0 does not require any parameters if called within a class will return the name of the class in which the function was declared (e.g., the parent class):

class myClass {     public static function test()     {         echo get_class().'::test()';     } }  class subClass extends myClass {}  subClass::test() // prints "myClass::test()" 

The __CLASS__ magic constant does the same [link].

class myClass {     public static function test()     {         echo __CLASS__.'::test()';     } }  class subClass extends myClass {}  subClass::test() // prints "myClass::test()" 
like image 162
gapple Avatar answered Sep 19 '22 15:09

gapple


Update:

Ahh, apologies. I was temporarily blind :) You'll want to use the magic constant __CLASS__

e.g.

if (method_exists(__CLASS__, "test3")) { echo "Hi"; } 
like image 29
hobodave Avatar answered Sep 20 '22 15:09

hobodave