Je veux vérifier si une fonction existe dans une bibliothèque que je crée, qui est statique. J'ai vu function et method_exists, mais je n'ai pas trouvé de moyen qui me permette de les appeler dans un contexte relatif. Voici un meilleur exemple:
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();
J'ai besoin de pouvoir faire écho au test 3 si la fonction existe, sans avoir besoin de la sortir de son contexte statique. Étant donné que le mot clé pour accéder à la classe doit être "self", car $ c'est pour les classes affectées.
static::class
Est disponible depuis PHP 5.5, et renverra le nom de la classe " Late Static Binding ":
class myClass {
public static function test()
{
echo static::class.'::test()';
}
}
class subClass extends myClass {}
subClass::test() // should print "subClass::test()"
get_called_class()
fait de même, et a été introduit dans PHP 5.3
class myClass {
public static function test()
{
echo get_called_class().'::test()';
}
}
class subClass extends myClass {}
subClass::test() // should print "subClass::test()"
La fonction get_class()
, qui à partir de php 5.0.0 ne nécessite aucun paramètre si elle est appelée dans une classe, renverra le nom de la classe dans laquelle la fonction a été déclarée (par exemple, la classe parente):
class myClass {
public static function test()
{
echo get_class().'::test()';
}
}
class subClass extends myClass {}
subClass::test() // prints "myClass::test()"
La __CLASS__
Constante magique fait de même [ link ].
class myClass {
public static function test()
{
echo __CLASS__.'::test()';
}
}
class subClass extends myClass {}
subClass::test() // prints "myClass::test()"
Ahh, excuses. J'étais temporairement aveugle :) Vous voudrez utiliser la constante magique __CLASS__
par exemple.
if (method_exists(__CLASS__, "test3")) { echo "Hi"; }