Наследование динамического класса php

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

$obj = (object)array('foo' => 'bar');+

таким образом я могу использовать

echo $obj->foo; //bar

Что если вы хотите, чтобы $obj наследовал от существующего класса?

Чего я хочу достичь: я разрабатываю парижский проект на github ( https://github.com/balanza/paris). Это активный класс записи. Интересно, мне нужно объявить класс для каждого объекта, даже если он пустой:

class User extends Model{}

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

4 ответа

Вы всегда можете сделать eval('class User extends Model{}') но это не очень хорошая идея На самом деле, вы должны просто создать класс в файле, тогда кэширование кода операции будет работать правильно, его можно отслеживать по версии и т. Д. И т. Д.

tl; dr: Определите класс модели, это именно то, что нужно делать ™.

Если у вас нет другого способа сделать это, вы можете создать "динамическое" наследование с моим классом Dynherit. Он создает наследование, которое вы хотите, но из файлов и только с классами, которые вы еще не загрузили.

Загрузить v0.62: http://optimisationphp.komrod.com/source/sha/test/dynamic_inheritance_01/dynherit_v0.62.zip

Ссылка на GitHub: https://github.com/Komrod/Dynherit

Строго на ваш вопрос, единственный способ увидеть это возможно - это использовать Runkit, который позволяет вам повторно объявлять классы на лету. Не уверен, насколько портативно это решение.

Вы можете использовать шаблон проектирования Prototype для клонирования объекта, затем вы можете добавить все, что вам нужно, в клонированный объект.

Другие вопросы по тегам