jgswift / prototypr
使用 traits 的 PHP 5.5+ 对象原型系统
dev-master
2014-06-02 13:00 UTC
Requires
- php: >=5.5
- jgswift/qtil: dev-master
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-28 15:12:11 UTC
README
使用 traits 的 PHP 5.5+ 对象原型系统
安装
通过 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"