studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones php static object

php - programacion - Averigüe si existe un método en una clase estática



manual de programacion android pdf (2)

Actualizar:

Ahh, disculpas. Estuve temporalmente ciego :) Querrás usar la constante mágica __CLASS__

p.ej

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

Quiero comprobar que existe una función en una biblioteca que estoy creando, que es estática. He visto function y method_exists, pero no he encontrado una forma que me permita llamarlos en un contexto relativo. Aquí hay un mejor ejemplo:

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

Necesito poder hacer la prueba 3 echo Hi si la función existe, sin necesidad de sacarla del contexto estático. Dada la palabra clave para acceder a la clase debe ser ''self'', ya que $ es para clases asignadas.


get_called_class() se introdujo en PHP 5.3 y devolverá el nombre de clase "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()"

La función get_class() , que a partir de php 5.0.0 no requiere ningún parámetro si se llama dentro de una clase devolverá el nombre de la clase en la que se declaró la función (por ejemplo, la clase padre):

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

La constante mágica __CLASS__ hace lo mismo [ link ].

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