2008-10-02 6 views
4

Я вернулся к разработке php с Moose, и я действительно пропустил CLOS-модель объекта для php. Есть ли какой-то синтетический сахар, который позволит мне написать меньше кода в php при работе с объектами?CLOS как объектная модель для PHP

Просто, чтобы подчеркнуть это требование немного больше. Я не хочу писать одну вещь в нескольких местах. Я могу жить с частью генерируемого кода автоматически, но в коде, который я должен видеть, чтобы развиваться, я не хочу видеть избыточную информацию, которая просто беспорядочна (подумайте: макрос LISP, если вам действительно нужна дополнительная аналогия). Поэтому эту часть можно также назвать DSL, если это имеет смысл.

Я хотел бы иметь, по крайней мере роль (Примеси), а какие-то интроспекции без заново изобретать водоворот. Генераторы кода и автозагрузчики могут быть одним из способов решить хотя бы часть этой проблемы.

p.s. Для JavaScript есть Joose, поэтому подобный API был бы очень полезен.

+0

Помимо автоматических геттеров и сеттеров, какие другие аспекты CLOS вы хотели бы увидеть? Значительная часть того, что я смог прочитать о CLOS за последние 5 минут, не будет достижимой в PHP. – 2008-10-02 22:43:24

ответ

2

В php еще нет миксинов, но есть RFC для черт, которые будут работать примерно одинаково. http://wiki.php.net/rfc/traits

Использование перегрузки для __call может позволить вам отправлять методы другим классам и иметь это похоже на mixin.

+0

Есть ли какая-нибудь надежда получить его в официальном php в ближайшее время? – dpavlin 2008-10-06 11:52:36

1

Symfony project has a mechanism for mixins, позволяющий ориентировать на аспекты программирования, как в CLOS. Лично мне не нравится такой взлом в пространстве пользователя (по крайней мере, не с PHP). Я думаю, вам будет лучше использовать функции, которые предоставляет язык, и, возможно, дождаться чего-то вроде черт (возможно), чтобы проникнуть на язык.

+0

Несмотря на то, что это похоже на хороший фреймворк, он не выполняет первоначальное требование меньшего кода, особенно __construct в примере, который вы связали. После нескольких чтений все еще кажется мне совершенно лишним. – dpavlin 2008-10-03 19:07:27