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 .

11voto

Rezan Achmad Points 1641

Maintenant, j'ai la réponse à mon problème. Merci à Brad pour le lien, je trouve la réponse aquí . Et grâce à J.Money pour l'idée. Ma solution :

<?php

class Model
{
    public static function getClassName() {
        return get_called_class();
    }
}

class Product extends Model {}

class User extends Model {}

echo Product::getClassName(); // "Product" 
echo User::getClassName(); // "User"

6voto

JerzySkalski Points 542

Je pense qu'il est important de mentionner la petite différence entre "self" et "static" en PHP car la "meilleure réponse" utilise "static", ce qui peut donner un résultat confus pour certaines personnes.

<?php
class X {
    function getStatic() {
        // gets THIS class of instance of object
        // that extends class in which is definied function
        return static::class;
    }
    function getSelf() {
        // gets THIS class of class in which function is declared
        return self::class;
    }
}

class Y extends X {
}
class Z extends Y {
}

$x = new X();
$y = new Y();
$z = new Z();

echo 'X:' . $x->getStatic() . ', ' . $x->getSelf() . 
    ', Y: ' . $y->getStatic() . ', ' . $y->getSelf() . 
    ', Z: ' . $z->getStatic() . ', ' . $z->getSelf();

Résultats :

X: X, X
Y: Y, X
Z: Z, X

5voto

lukascorr Points 51

Cela renverra le nom de la classe pure, même en utilisant un espace de nom :

echo substr(strrchr(__CLASS__, "\\"), 1);

2voto

CallMarl Points 81

end(preg_split("#(\\\\|\\/)#", Class_Name::class))

Class_Name::class : retourner la classe avec l'espace de nom. Donc après il suffit de créer un tableau, puis de récupérer la dernière valeur du tableau.

0voto

23Pstars Points 35
<?php
namespace CMS;
class Model {
  const _class = __CLASS__;
}

echo Model::_class; // will return 'CMS\Model'

pour les personnes âgées de plus de PHP 5.5

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