1

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

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

это так, как я могу использовать

echo $obj->foo; //bar 

Что делать, если хотят сделать $ OBJ наследует от существующего класса?

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

class User extends Model{} 

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

+1

Так что вы хотите полностью затенить способ создать объект, который простирается от класса, потому что это «скучный», чтобы определить класс? Кроме того, если ваш класс расширения пуст, что не так с $ obj = new Model() ;? Или это тоже «скучно»? – Cfreak

+1

'(object) array()' не "генерирует класс во время выполнения", он создает ** объект **. Это важное различие. – deceze

ответ

0

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

2

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

tl; dr: Определите класс модели, это Right Thing To Do ™.

1

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

Скачать v0.62: http://optimisationphp.komrod.com/source/sha/test/dynamic_inheritance_01/dynherit_v0.62.zip

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

Смежные вопросы