Динамично генерируйте классы во времени выполнения в php?

Я никогда не делал этого в PHP, и я никогда не использовал Python, но что Вы хотите сделать, дразнить вызовы к базе данных. Чтобы сделать это, можно реализовать [приблизительно 110] МОК , управляете ли сторонний инструмент или Вы им сами, тогда можно реализовать некоторую ложную версию вызывающей стороны базы данных, которая является, где Вы будете управлять результатом того поддельного вызова.

А простая форма МОК может быть выполнена только путем кодирования к Интерфейсам. Это требует некоторой объектной ориентации, продолжающейся в Вашем коде, таким образом, это не может относиться к тому, что Ваше выполнение (я говорю, что начиная со всего должен продолжить, является Вашим упоминанием о PHP и Python)

Hope, это полезно, если ничто иное у Вас есть некоторые условия для поиска на теперь.

29
задан Will Shaver 29 July 2009 в 23:49
поделиться

4 ответа

Это почти наверняка плохая идея.

Я думаю, что ваше время было бы лучше потратить на создание сценария, который бы создавал определения ваших классов для вас, а не на попытки сделать это во время выполнения.

Что-то с подписью командной строки, например:

./generate_classes_from_db <host> <database> [tables] [output dir]
2
ответ дан 28 November 2019 в 01:45
поделиться

Использование eval () - действительно плохая идея. Это открывает большую дыру в безопасности. Только не используйте это!

3
ответ дан 28 November 2019 в 01:45
поделиться

Пожалуйста, прочтите ответы всех остальных о том, что это действительно очень-очень плохая идея.

Как только вы это поймете, вот небольшая демонстрация того, как вы могли, но не должны, делать это .


<?php
$clname = "TestClass";

eval("class $clname{}; \$cls = new $clname();");

var_dump($cls);
2
ответ дан 28 November 2019 в 01:45
поделиться

это забавно, на самом деле это одна из немногих вещей, где eval не кажется такой плохой идеей.

при условии, что вы можете гарантировать, что никакие пользовательские данные никогда не попадут в eval.

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

если вы знаете, что делаете, eval вам в этом поможет.

Тем не менее, на мой взгляд, вам будет намного лучше, если вы не будете полагаться на подсказки типов для проверки, но у вас будет одна функция

DoSomething_Validate($id)
{ 
   // get_class($id) and other validation foo here
}
13
ответ дан 28 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: