Я никогда не делал этого в PHP, и я никогда не использовал Python, но что Вы хотите сделать, дразнить вызовы к базе данных. Чтобы сделать это, можно реализовать [приблизительно 110] МОК , управляете ли сторонний инструмент или Вы им сами, тогда можно реализовать некоторую ложную версию вызывающей стороны базы данных, которая является, где Вы будете управлять результатом того поддельного вызова.
А простая форма МОК может быть выполнена только путем кодирования к Интерфейсам. Это требует некоторой объектной ориентации, продолжающейся в Вашем коде, таким образом, это не может относиться к тому, что Ваше выполнение (я говорю, что начиная со всего должен продолжить, является Вашим упоминанием о PHP и Python)
Hope, это полезно, если ничто иное у Вас есть некоторые условия для поиска на теперь.
Это почти наверняка плохая идея.
Я думаю, что ваше время было бы лучше потратить на создание сценария, который бы создавал определения ваших классов для вас, а не на попытки сделать это во время выполнения.
Что-то с подписью командной строки, например:
./generate_classes_from_db <host> <database> [tables] [output dir]
Использование eval () - действительно плохая идея. Это открывает большую дыру в безопасности. Только не используйте это!
Пожалуйста, прочтите ответы всех остальных о том, что это действительно очень-очень плохая идея.
Как только вы это поймете, вот небольшая демонстрация того, как вы могли, но не должны, делать это .
<?php
$clname = "TestClass";
eval("class $clname{}; \$cls = new $clname();");
var_dump($cls);
это забавно, на самом деле это одна из немногих вещей, где eval не кажется такой плохой идеей.
при условии, что вы можете гарантировать, что никакие пользовательские данные никогда не попадут в eval.
у вас все еще есть недостатки, например, когда вы используете кэш байт-кода, этот код не будет кэшироваться и т. Д., Но проблемы безопасности eval в значительной степени связаны с тем, что пользователь вводит данные в eval, или с тем, что он попадает в неправильную область видимости.
если вы знаете, что делаете, eval вам в этом поможет.
Тем не менее, на мой взгляд, вам будет намного лучше, если вы не будете полагаться на подсказки типов для проверки, но у вас будет одна функция
DoSomething_Validate($id)
{
// get_class($id) and other validation foo here
}