jgswift / prototypr

使用 traits 的 PHP 5.5+ 对象原型系统

dev-master 2014-06-02 13:00 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:12:11 UTC


README

使用 traits 的 PHP 5.5+ 对象原型系统

Build Status Scrutinizer Code Quality

安装

通过 Composer 安装

php composer.phar require jgswift/prototypr:dev-master

用法

Prototypr 是一个轻量级的 PHP trait,它通过魔术方法实现了简单的对象原型化。Prototypr 的目的是在不干扰你的领域模型的情况下,为 PHP 添加简单的原型行为。

以下是一个最小示例

<?php
class Foo
{
    use prototypr\Prototype;
}

Foo::bar(function() {
    return "baz";
});

$foo = new Foo;
var_dump($foo->bar()); // returns "baz"

或者,方法可以在局部作用域中设置,并且只适用于单个对象

class Foo
{
    use prototypr\Prototype;
}

$foo = new Foo();
$foo->bar(function() {
    return "baz";
});
var_dump($foo->bar()); // returns "baz"

prototypr 支持多个闭包的延迟绑定,并且无论返回条件如何,都会执行所有闭包

class Foo
{
    use prototypr\Prototype;
}

$count = 0;
Foo::bar(function()use(&$count) {
    $count+=1;
});

Foo::bar(function()use(&$count) {
    $count+=2;
});

$foo = new Foo();
$foo->bar();

var_dump($count); // returns 3

prototypr 将自动遍历类树以查找方法,但你也可以指定单个扩展

class Foo
{
    use prototypr\Prototype;
}

Foo::bar(function() {
    return "somethingImportant";
});

class Baz
{
    use prototypr\Prototype;
}

prototypr\Manager::extend('Baz','Foo');

var_dump(count(prototypr\Registry::prototypes('Baz'))); // returns 1

$baz = new Baz;
var_dump($baz->bar()); // returns "somethingImportant"