Узнайте, существует ли метод в статическом классе

Я хочу проверить, существует ли функция в библиотеке, которую я создаю, которая является статической. Я видел функции и методы_exists, но не нашел способ, который позволяет мне называть их в относительном контексте. Вот лучший пример:

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(); 

Мне нужно иметь возможность сделать тест 3 echo Hi, если функция существует, без необходимости извлекать ее из статического контекста. Учитывая, что ключевое слово для доступа к классу должно быть «я», в качестве $ это для назначенных классов.

get_called_class() был введен в PHP 5.3 и вернет имя класса «Late Static Binding»:

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

Функция get_class() , которая с php 5.0.0 не требует каких-либо параметров, если вызываемый внутри класса возвращает имя класса, в котором была объявлена ​​функция (например, родительский класс):

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

Магическая константа __CLASS__ делает то же [ ссылка ].

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

Обновить:

Ах, извини. Я был временно слеп 🙂 Вы хотите использовать магическую константу __CLASS__

например

 if (method_exists(__CLASS__, "test3")) { echo "Hi"; }