Прототип наследования в PHP (как в JavaScript) - PullRequest
7 голосов
/ 03 февраля 2010

Можно ли использовать какое-то прототипное наследование в PHP , как это реализовано в JavaScript ?

Этот вопрос пришел мне в голову просто из любопытстваНе то чтобы я должен был реализовать такую ​​вещь и пойти против классического наследства.Это просто интересная область для изучения.

Существуют ли функции предварительной сборки, комбинирующие классическую модель наследования в PHP с неким видом Прототипное наследование с комбинацией анонимногофункции?

Допустим, у меня есть простой класс для UserModel

class UserModel implements PrototypalInheritance
{
    // setters, getters, logic..
    static public function Prototype () {}
}

$user = new UserModel();

UserModel::prototype()->getNameSlug = function () {
    return slugify($this->getUserName());
}

echo $user->getNameSlug();

1 Ответ

3 голосов
/ 03 февраля 2010

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

Если вы ищете что-то вроде миксинов / черт, вы можете использовать Декораторы .

Существует RFC о том, есть ли черты в PHP6 .

Что вы могли бы сделать, так это создать шаблон Prototype, который отслеживает жизненный цикл клонированных объектов с помощью SplObjectStorage. Всякий раз, когда прототип изменяется, Строитель будет проходить по карте и соответствующим образом корректировать экземпляры. Исправление обезьяны должно быть сделано через runkit . Звучит нереально: imho:)

...