Czy istnieje sposób dynamicznego tworzenia stałych klas? Wiem, że to brzmi trochę dziwnie, ale pozwól mi wyjaśnić, co usiłuję zrobić:Dynamiczne stałe w PHP?
- Mam klasy Enum kto atrybuty są definiowane przez statyczne
const
definicji - Ta klasa rozszerza klasę PHP SplEnum
- Zamiast typu w każdej z tych definicji w kodzie Chciałbym mieć statyczny initialiser wychodzić do bazy danych i wyciągnąć wartości wyliczonych
Może latków tak:
class myEnum extends SplEnum {
public static function init() {
$myNameValuePair = DB_Functions::get_enum_list();
foreach ($myNameValuePair as $name => $value) {
$const = array (self , $name);
$const = $value;
}
}
}
Rozumiem, że to nie zadziała, ponieważ nie ustawia CONST, lecz raczej statyczne. Może cały mój pomysł jest oparty na włosach i jest na to lepsza technika. W każdym razie, każda metoda osiągnięcia celu końcowego jest bardzo doceniana.
UPDATE
myślę, że może to być pomocne, aby być bardziej jasne, na moich celów, ponieważ myślę, że to całkiem możliwe, że moje użycie Stałe nie jest dobry. Zasadniczo chcę osiągnąć jest typowe wymagania listy wyliczonych za:
funkcyjne Constrain podpisy. Chcę móc poprosić o "zestaw" wartości jako dane wejściowe do funkcji. Na przykład:
public function do_something (ENUM_Types $ type) {}
prosta i zwarta. Pozwól na prostą i zwartą składnię, jeśli jest używana w kodzie. Na przykład z wykorzystaniem stałych może napisać coś jak instrukcja warunkowa:
if ($ my_var === ENUM_Types :: TypeA) {}
dynamiczne wyliczanie. Chciałbym, żeby to wyliczenie było zarządzane przez frontend i przechowywane w bazie danych (używam screenów administratora wordpress w tym przypadku, gdyby ktoś miał na to ochotę). W czasie wykonywania ta "lista" powinna być wyciągnięta z bazy danych i udostępniona kodowi jako wyliczenie (lub podobna struktura, która osiąga powyższe cele).
Z definicji stałej nie może być dynamiczny. Dlaczego po prostu nie używać zmiennych statycznych? – Matt
No tak, wiem i dlatego powiedziałem, że "może wydawać się nieco dziwne". Zaktualizuję nieco pytanie, aby było jasne, co próbuję osiągnąć. – ken
Innymi słowy ... nie chcesz dynamicznych stałych, chcesz dynamicznych wyliczeń. – EthanB