The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PHP)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Какой верный путь для получения экземпляро объектов по их типу?, Вервер (?), 11-Фев-23, (0) [смотреть все] +9

Сообщения [Сортировка по времени | RSS]


1. "Какой верный путь для получения экземпляро объектов по их типу?"  +8 +/
Сообщение от Вервер (?), 11-Фев-23, 12:10 
Ещё дополню, что почему не стал использовать вариант с получением условно по имени класса в переменной, у меня ощущение, что такое динамическое получение объекта чем то сродни exec(), а такого рода финты вроде не совсем правильно использовать. А варианты типов объектов класса свё равно же создаются и их можно сразу в перечисление switch case добавлять.

Ответить | Правка | Наверх | Cообщить модератору

3. "Какой верный путь для получения экземпляро объектов по их типу?"  +6 +/
Сообщение от Аноним (3), 11-Фев-23, 16:07 
> Ещё дополню, что почему не стал использовать вариант с получением условно по
> имени класса в переменной, у меня ощущение, что такое динамическое получение
> объекта чем то сродни exec(), а такого рода финты вроде не
> совсем правильно использовать. А варианты типов объектов класса свё равно же
> создаются и их можно сразу в перечисление switch case добавлять.
>чем то сродни exec(), а такого рода финты вроде не совсем правильно использовать

eval и иже с ним плохи в первую очередь из-за того, что в них поступает непроверенный пользовательский код. Если оный в него не поступает, жить можно, вон, один язык на eval опирается как на основной способ расширения синтаксиса и ничего.

Ответить | Правка | Наверх | Cообщить модератору

8. "Какой верный путь для получения экземпляро объектов по их типу?"  +5 +/
Сообщение от Вервер (?), 11-Фев-23, 20:45 
> eval и иже с ним плохи в первую очередь из-за того, что
> в них поступает непроверенный пользовательский код. Если оный в него не
> поступает, жить можно, вон, один язык на eval опирается как на
> основной способ расширения синтаксиса и ничего.

Да, точно спутал я exec с eval'ом. Предубеждение у меня к eval'у. Совсем противоестественно использовать эту конструкцию и никогда её не использую.

Ответить | Правка | Наверх | Cообщить модератору

10. "Какой верный путь для получения экземпляро объектов по их типу?"  +4 +/
Сообщение от Аноним (10), 12-Фев-23, 05:00 
>А варианты типов объектов класса свё равно же создаются и их можно сразу в перечисление switch case добавлять.

Вот этот вариант подойдёт как решение наполовину (если вы это будете делать не в основном классе, а в подклассах на этапе инициализации класса или опосредованно через базовый класс, но динамически и опять же через инициализацию подкласса, базовый класс не должен знать все подклассы - не в курсе, как там оно именно делается в PHP, но механизм должен быть), но проще было бы динамически получать имя класса - если каких-то дополнительных трудностей нет.

А вообще, зачем вам получать потомков класса через базовый класс, а не через конструктор собственно потомка?

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

12. "Какой верный путь для получения экземпляро объектов по их типу?"  +6 +/
Сообщение от Вервер (?), 12-Фев-23, 08:59 
> А вообще, зачем вам получать потомков класса через базовый класс, а не
> через конструктор собственно потомка?

Потому что условно в БД хранится тип объекта (к примеру число objType), и мне чтобы через конструктор потомка получать экземпляр объекта - мне надо имя класса этого потомка знать по его objType? И потом делать этот озвученный "динамический трюк" $objItem=new $objClassName();
А как я узнаю, что в переменной $objClassName - корректное название класса?
Эта вот неоднозначность меня смущает. Я не могу понять - как получается в случае динамического варианта, что имя класса - экземпляр объекта которого я хочу получить - верное?

Ответить | Правка | Наверх | Cообщить модератору

18. "Какой верный путь для получения экземпляро объектов по их типу?"  +3 +/
Сообщение от Аноним (18), 15-Фев-23, 13:56 
>А как я узнаю, что в переменной $objClassName - корректное название класса?

А оно надо? Кто пользователь ORM - программист или внешний пользователь, который про эти имена классов вообще знать ничего не должен?

Ответить | Правка | Наверх | Cообщить модератору

21. "Какой верный путь для получения экземпляро объектов по их типу?"  +2 +/
Сообщение от Вервер (?), 15-Фев-23, 19:25 
> А оно надо? Кто пользователь ORM - программист или внешний пользователь, который
> про эти имена классов вообще знать ничего не должен?

Пользователь ORM - получается программист, т.е. Я. Она (типа ORM, хотя конечно нет) для построения логики с сущностями которые реализуют объекты в приложении. Но в любом случае неважно должен внешний пользователь знать про имена классов или нет, как для "динамического" варианта я должен соотнести objTypeID из базы с именем класса, чтобы выполнить итоговою строку

$objItem = new $objClassName();
? Варианта вижу 2:
Или в коде формировать связь objTypeID => objClassName, т.е.
$objTypeData = [
   Doc_Dogovor::OBJ_TYPE => 'Doc_Dogovor',
   Doc_Pismo::OBJ_TYPE => 'Doc_Pismo',
];
......
$objItem = new $objTypeData[$objTypeID]();

Либо в самой БД хранить не objTypeID - а сразу имя класса, но вроде это совсем грязь, хранить куски кода в БД.

Или я чего-то не понимаю?

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру