Есть ли официальный / рекомендуемый способ объявить / определить / зарегистрировать новый класс во время выполнения в PHP?
В основном я хочу создать классы на основе определения, хранящегося в базе данных, как свойств, так и методов.
Я нашел некоторые статьи / темы, но все они на самом деле старые, поэтому мне было интересно, существует ли какой-нибудь элегантный / эффективный способ сделать это. Мое удивление в том, что информации об этом не так много, как я думал.
Это так плохо? Насколько я знаю, PHP всегда сохраняет определение класса в памяти, поэтому я не вижу проблем в объявлении класса во время выполнения, поскольку это в основном тот же результат, но, возможно, я ошибаюсь.
Я думаю, что сейчас это не актуально, но я работаю с Laravel в этом проекте.
Спасибо!
Да.
<?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 девственниц принесены в жертву сатане.
object (foobar) # 1 (0) {}
Я не собираюсь читать вам лекции по семантике, но это ужасно плохая идея, и вам следует пересмотреть использование классов, чтобы облегчить то, что нужно записям в базе данных. Сам по себе класс не является особенным, но использование класса для обработки записи в базе данных вполне приемлемо.
Других решений пока нет …