Chciałbym móc zrobić coś takiego:
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = 'Something';
$id = ThingIDs::$thing;
To nie działa. Czy istnieje prosty sposób na zrobienie czegoś równoważnego? Zwróć uwagę, że utknąłem z klasą; jest w bibliotece, której nie mogę przepisać. Piszę kod, który przyjmuje argumenty w wierszu poleceń i naprawdę chciałbym, aby przyjmował nazwy symboliczne zamiast numerów identyfikacyjnych.
php
class-constants
Ben
źródło
źródło
ThingIDs::{$thing}
?Odpowiedzi:
$id = constant("ThingIDs::$thing");
http://php.net/manual/en/function.constant.php
źródło
defined("ThingIDs::$thing");
$id = constant(sprintf('%s::%s', ThingIDs::class, $thing));
use
w górnej części pliku, a następnie użycie::class
metody magicznego uzyskania nazwy FQDN poprawia czytelność.Użyj odbicia
źródło
Jeśli używasz przestrzeni nazw, powinieneś dołączyć przestrzeń nazw do klasy.
źródło
źródło
Funkcja pomocnicza
Możesz użyć takiej funkcji:
Wymaga dwóch argumentów:
Jeśli przekazana zostanie instancja obiektu, zostanie wywnioskowana nazwa jej klasy. Jeśli używasz PHP 7, możesz użyć
::class
do przekazania odpowiedniej nazwy klasy bez konieczności myślenia o przestrzeniach nazw.Przykłady
źródło
Jeśli masz odwołanie do samej klasy, możesz wykonać następujące czynności:
źródło
Mój problem był podobny do tego tematu. Gdy masz obiekt, ale nie nazwę klasy, możesz użyć:
źródło