PHP中的原型继承(如在JavaScript中)

Jur*_*nka 7 javascript php inheritance prototype prototypal-inheritance

是否可以在PHP中使用某种原型继承,就像在JavaScript中实现一样?

出于好奇,我想到了这个问题,而不是我必须实施这样的事情并反对经典继承.它只是一个有趣的探索区域.

是否有预构建函数 PHP中的经典继承模型与某种具有匿名函数组合的Prototypal继承相结合?

假设我有一个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();
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 3

您可以使用原型创建模式来实现与此类似的东西,但是像 JavaScript 中那样的真正原型继承是不可能的。

如果您正在寻找诸如 mixins/traits 之类的东西,您可以使用Decorators

不过,有一个关于 PHP6 中是否具有特征的 RFC

您可以做的是使用原型模式,通过 SplObjectStorage 跟踪其克隆对象的生命周期。每当原型发生变化时,构建器都会遍历地图并相应地调整实例。不过, Monkey 补丁必须通过runkit来完成。恕我直言,听起来不太可行:)