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