2016-05-03 1 views
2

Есть ли официальный/рекомендуемый способ объявить/определить/зарегистрировать новый класс во время выполнения на PHP?PHP: Как создать и зарегистрировать класс во время выполнения

Что я в основном хочу сделать, это генерировать классы на основе определения, хранящегося в базе данных, как свойств, так и методов.

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

Это так плохо? Насколько я знаю, PHP всегда сохраняет определение класса в памяти, поэтому я не вижу проблемы при объявлении класса во время выполнения, поскольку это в основном тот же результат, но, возможно, я ошибаюсь.

Я думаю, что это не актуально прямо сейчас, но я работаю с Laravel в этом проекте.

Спасибо!

ответ

2

Да.

<?php 

$foobar = "foobar"; 

eval("class $foobar {" . 
     "function __construct(\$i) {" . 
       "echo \"Dark magic ritual complete. \$i virgins sacrificed to satan.\"; " . 
     "}" . 
" }"); 

$evil = new $foobar(5); 


echo "<br /><br />"; 

var_dump($evil); 

Производит:

Темный магический ритуал завершен. 5 девственниц, принесенных в жертву сатане.

объект (Foobar) # 1 (0) {}

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

+0

Я думаю, что он создает классы на основе значений, хранящихся в базе данных, а не что-то эквивалентное ORM. – dbf

+0

Либо мне нужно больше кофеина, либо «объявить/определить/зарегистрироваться» имеет для меня другое значение. Тривиально создавать «новый», что указывает на то, что он хочет что-то более сложное. – Josh

+1

Спасибо за ваш ответ. Мне действительно нужно работать с динамическими объектами, так как разные пользователи должны иметь возможность создавать свои собственные объекты со своими атрибутами. Я решил не использовать «анти» -патент Entity-Attribute-Value из-за сложности и всех недостатков, поэтому я подумал, что это может быть лучшим решением. Я попытался спросить, какой был лучший подход/шаблон для этого в другом вопросе, но он не работал, поскольку это не был вопрос Php specificc. Итак, какая рекомендация для этого? – Desproposito