public class MyClass {
}
Em Java, podemos obter o nome da classe com String className = MyClass.class.getSimpleName();
Como fazer isso em PHP? Eu já sei get_class()
, mas funciona apenas para objetos. Atualmente trabalho com Active Record. Eu preciso de uma declaração como MyClass::className
.
public $__CLASS__ = __CLASS__;
dança com todas as outras classes ...Respostas:
Desde o PHP 5.5 você pode usar resolução de nome de classe via ClassName :: class .
Veja os novos recursos do PHP5.5 .
Se você quiser usar este recurso em seu método de classe, use static :: class :
Para versões anteriores do PHP , você pode usar get_class () .
fonte
static::class
eget_class_name()
?static::class
é resolvido durante o tempo de compilação, enquantoget_class_name()
é interpretado durante o tempo de execução. Descobri isso ao tentar acessar o :: propriedade de classe de uma classe gerada dinamicamente e recebendo o seguinte erro (?):Dynamic class names are not allowed in compile-time ::class fetch
. Veja esta resposta para mais detalhes. Eu também achei esta nota dos documentos útil.Você pode usar
__CLASS__
dentro de uma classe para obter o nome.http://php.net/manual/en/language.constants.predefined.php
fonte
get_class($this)
,static::class
) simplesmente retorna o nome da classe filha (que estende o pai).self::class
também, parece retornar o nome da classe pai.Parece que você respondeu sua própria pergunta.
get_class
obterá o nome da classe. É processual e talvez seja isso que esteja causando a confusão. Dê uma olhada na documentação php paraget_class
Aqui está o exemplo deles:
Para torná-lo mais parecido com o seu exemplo, você poderia fazer algo como:
Agora você pode fazer:
Isso é um pouco limitado, entretanto, porque se minha classe for estendida, ela ainda retornará 'MyClass'. Podemos usar
get_called_class
, em vez disso, o que depende de Late Static Binding , um recurso relativamente novo e requer PHP> = 5.3.fonte
Agora, tenho uma resposta para o meu problema. Agradeço ao Brad pelo link, encontro a resposta aqui . E obrigado a J.Money pela ideia. Minha solução:
fonte
FooBar::getClassName()
é sempre'FooBar'
. Se você pudesse digitarProduct::getClassName()
, você também poderia digitar'Product'
.Para obter o nome da classe, você pode usar ReflectionClass
fonte
Parece
ReflectionClass
uma opção bastante produtiva.Referência:
fonte
Eu acho que é importante mencionar pouca diferença entre 'self' e 'static' no PHP, já que a 'melhor resposta' usa 'estático', o que pode dar um resultado confuso para algumas pessoas.
Resultados:
fonte
end(preg_split("#(\\\\|\\/)#", Class_Name::class))
Class_Name::class
: retorna a classe com o namespace. Então, depois que você só precisa criar um array, obtenha o último valor do array.fonte
para mais de PHP 5.5
fonte
fonte