Eu gostaria de ser capaz de fazer algo assim:
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = 'Something';
$id = ThingIDs::$thing;
Isso não funciona. Existe uma maneira direta de fazer algo equivalente? Observe que estou preso à classe; está em uma biblioteca que não consigo reescrever. Estou escrevendo um código que usa argumentos na linha de comando e gostaria muito que recebesse nomes simbólicos em vez de números de id.
php
class-constants
Ben
fonte
fonte
ThingIDs::{$thing}
?Respostas:
$id = constant("ThingIDs::$thing");
http://php.net/manual/en/function.constant.php
fonte
defined("ThingIDs::$thing");
$id = constant(sprintf('%s::%s', ThingIDs::class, $thing));
use
na parte superior do arquivo e, em seguida, usar o::class
método para obter magicamente o FQDN melhora a legibilidade.Use Reflexão
fonte
Se você estiver usando namespaces, deverá incluir o namespace com a classe.
fonte
fonte
Função auxiliar
Você pode usar uma função como esta:
Leva dois argumentos:
Se uma instância de objeto é passada, seu nome de classe é inferido. Se você usa o PHP 7, pode usar
::class
para passar o nome da classe apropriado sem ter que pensar em namespaces.Exemplos
fonte
Se você tiver uma referência à própria classe, poderá fazer o seguinte:
fonte
Meu problema era semelhante a este assunto. Quando você tem o objeto, mas não o nome da classe, pode usar:
fonte