123 votes

Comment obtenir le nom d'une classe en PHP ?

public class MyClass {

}

En Java, nous pouvons obtenir le nom de la classe avec String className = MyClass.class.getSimpleName();

Comment faire cela en PHP ? Je connais déjà get_class() mais cela ne fonctionne que pour les objets. Actuellement, je travaille en Active Record. J'ai besoin d'une déclaration comme MyClass::className .

146voto

Dado Points 449

Depuis PHP 5.5 vous pouvez utiliser la résolution du nom de la classe via Nom de la classe::classe .

Voir Nouvelles fonctionnalités de PHP5.5 .

<?php

namespace Name\Space;

class ClassName {}

echo ClassName::class;

?>

Si vous voulez utiliser cette fonctionnalité dans votre méthode de classe, utilisez statique::classe :

<?php

namespace Name\Space;

class ClassName {
   /**
    * @return string
    */
   public function getNameOfClass()
   {
      return static::class;
   }
}

$obj = new ClassName();
echo $obj->getNameOfClass();

?>

Pour les anciennes versions de PHP vous pouvez utiliser get_class() .

32voto

Brad Points 61171

Vous pouvez utiliser __CLASS__ dans une classe pour obtenir le nom.

http://php.net/manual/en/language.constants.predefined.php

31voto

J.Money Points 1997

On dirait que tu as répondu à ta propre question. get_class vous donnera le nom de la classe. C'est une procédure et c'est peut-être ce qui cause la confusion. Jetez un coup d'œil à la documentation php pour get_class

Voici leur exemple :

 <?php

 class foo 
 {
     function name()
     {
         echo "My name is " , get_class($this) , "\n";
     }
 }

 // create an object
 $bar = new foo();

 // external call
 echo "Its name is " , get_class($bar) , "\n"; // It's name is foo

 // internal call
 $bar->name(); // My name is foo

Pour que cela ressemble plus à votre exemple, vous pourriez faire quelque chose comme :

 <?php

 class MyClass
 {
       public static function getClass()
       {
            return get_class();
       }
 }

Maintenant vous pouvez le faire :

 $className = MyClass::getClass();

Cette méthode est toutefois quelque peu limitée, car si ma classe est étendue, elle renverra toujours 'MyClass'. Nous pouvons utiliser get_called_class au lieu de cela, qui s'appuie sur Liaison statique tardive est une fonctionnalité relativement nouvelle, qui nécessite PHP >= 5.3.

<?php

class MyClass
{
    public static function getClass()
    {
        return get_called_class();
    }

    public static function getDefiningClass()
    {
        return get_class();
    }
}

class MyExtendedClass extends MyClass {}

$className = MyClass::getClass(); // 'MyClass'
$className = MyExtendedClass::getClass(); // 'MyExtendedClass'
$className = MyExtendedClass::getDefiningClass(); // 'MyClass'

15voto

On dirait que ReflectionClass est une option assez productive.

class MyClass {
    public function test() {
        // 'MyClass'
        return (new \ReflectionClass($this))->getShortName();
    }
}

Point de repère :

Method Name      Iterations    Average Time      Ops/second
--------------  ------------  --------------    -------------
testExplode   : [10,000    ] [0.0000020221710] [494,518.01547]
testSubstring : [10,000    ] [0.0000017177343] [582,162.19968]
testReflection: [10,000    ] [0.0000015984058] [625,623.34059]

14voto

Omar Makled Points 372

Pour obtenir le nom de la classe, vous pouvez utiliser ReflectionClass

class MyClass {
    public function myNameIs(){
        return (new \ReflectionClass($this))->getShortName();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X