public class MyClass {
}
En Java, podemos obtener el nombre de la clase con String className = MyClass.class.getSimpleName();
¿Cómo hacer esto en PHP? Ya lo sé get_class()
, pero funciona solo para objetos. Actualmente trabajo en Active Record. Necesito una declaración como MyClass::className
.
public $__CLASS__ = __CLASS__;
baile con todas las demás clases ...Respuestas:
Desde PHP 5.5 puede usar la resolución de nombres de clases a través de ClassName :: class .
Vea las nuevas características de PHP5.5 .
Si desea usar esta característica en su método de clase, use static :: class :
Para versiones anteriores de PHP , puede usar get_class () .
fuente
static::class
yget_class_name()
?static::class
se resuelve durante el tiempo de compilación, mientras queget_class_name()
se interpreta durante el tiempo de ejecución. Yo descubrí esto al tratar de acceder a la propiedad de clase :: de una clase generada de forma dinámica y obtener el siguiente error (?):Dynamic class names are not allowed in compile-time ::class fetch
. Consulte esta respuesta para obtener más detalles. También encontré útil esta nota de los documentos.Puede usar
__CLASS__
dentro de una clase para obtener el nombre.http://php.net/manual/en/language.constants.predefined.php
fuente
get_class($this)
,static::class
) simplemente devuelve el nombre de la clase secundaria (que extiende al padre).self::class
también, parece devolver el nombre de la clase principal.Parece que respondiste tu propia pregunta.
get_class
obtendrá el nombre de la clase. Es procedimental y quizás eso es lo que está causando la confusión. Eche un vistazo a la documentación de php paraget_class
Aquí está su ejemplo:
Para que se parezca más a su ejemplo, podría hacer algo como:
Ahora puedes hacer:
Sin embargo, esto es algo limitado porque si mi clase se amplía, todavía devolverá 'MyClass'. Podemos usar
get_called_class
en su lugar, que se basa en Late Static Binding , una característica relativamente nueva, y requiere PHP> = 5.3.fuente
Ahora tengo la respuesta a mi problema. Gracias a Brad por el enlace, encuentro la respuesta aquí . Y gracias a J.Money por la idea. Mi solución:
fuente
FooBar::getClassName()
es siempre'FooBar'
. Si pudiera escribirProduct::getClassName()
, también podría escribir en su'Product'
lugar.Para obtener el nombre de la clase, puede usar ReflectionClass
fuente
Parece que
ReflectionClass
es una opción bastante productiva.Punto de referencia:
fuente
Creo que es importante mencionar poca diferencia entre 'self' y 'static' en PHP, ya que la 'mejor respuesta' usa 'static', lo que puede dar un resultado confuso a algunas personas.
Resultados:
fuente
end(preg_split("#(\\\\|\\/)#", Class_Name::class))
Class_Name::class
: devuelve la clase con el espacio de nombres. Entonces, después de que solo necesite crear una matriz, obtenga el último valor de la matriz.fuente
para versiones anteriores a PHP 5.5
fuente
fuente