Я хотел бы определить имя класса, используя переменные в PHP. Это возможно?
Позволь мне объяснить.
Я небольшой пользовательский CMS, который позволяет конечному пользователю настроить префикс для имен таблиц. Таким образом, пользователь может определить префикс, такой как «rc_». Проблема в том, что у меня много моделей, которые используют имя таблицы в качестве класса. Например, если одна из моих таблиц – rc_posts
, модель будет вызвана
class MyModel_Rc_posts extends MyModelController { // code here }
Есть ли способ определить класс с использованием переменных в PHP БЕЗ использования eval()
например:
class MyModel_{$PREFIX}posts extends MyModelController { // code here }
Причина, по которой я хочу избежать eval, заключается в том, что некоторые из этих классов могут стать довольно длинными. Предложения оценены.
Взгляните на class_alias – это должно помочь вам сделать это даже читаемым!
Чтобы это было ясно: вы создаете свой класс с «нормальным» именем, а затем добавляете псевдоним по требованию. Имя псевдонима может быть любой строкой, включая строку, хранящуюся в переменной.
редактировать
Хотя я думаю, что class_alias()
– это путь, вот пример того, как это сделать без него.
Из вашего OQ:
class MyModel_Rc_posts extends MyModelController { // code here }
Теперь
eval("class MyModel_{$PREFIX}posts extends MyModel_Rc_posts {};");
должен сделать что-то очень похожее на class_alias()
.
Если вам понадобится get_class()
позже – в aliased-классе, это даст вам исходное (статическое) имя класса, а не псевдоним. С уродливым eval()
/ extends
трюком вы получаете динамическое имя.