Я использую активную запись в течение довольно длительного времени, и я хотел немного изменить декорации, некоторые друзья-разработчики предложили заглянуть в ORM, все проекты ORM, на которые я смотрел, требуют отдельного класса, расширяющего ORM класс.Динамически создаваемые классы
Мой вопрос: есть ли способ динамического создания класса с использованием PHP изнутри функции безeval
?
Это то, что у меня есть:
<?php
class Constructor
{
function new_class($class)
{
$myself = get_called_class();
eval("class {$class} extends {$myself} { }");
}
function say_hi()
{
$class = get_called_class();
echo "Hi, {$class}!";
}
}
$constructor = new Constructor;
$constructor->new_class("Greeter");
$greeter = new Greeter;
$greeter->say_hi(); // Hi, Greeter!
Но, мой клиент сообщает мне, что eval
блокируется на его среду из-за него быть на хостинг.
но почему? создать класс, поместить параметры в массив, добавить методы '__set' и' __get' - установить параметры в массиве, вы можете добавить параметр '$ name', который установит' setName ($ name) 'и он будет имя класса, пытающегося получить, сделать 'getName(). Наследник класса. – mkjasinski
В PHP нет «красивого» способа сделать это. Вы можете использовать eval() или создать файл с определением класса во время выполнения, а затем включить() это ... Но подумайте об изменении дизайна вашей программы. См. Http://stackoverflow.com/questions/3490474/how-to-create-or-define-class-in-php-at-runtime –