bettrlife / schmancy-oo
花哨的面向对象工具。
dev-master
2015-11-12 18:02 UTC
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-28 16:38:15 UTC
README
SchmancyOO提供了一些Lisp风格的面向对象工具,可能会使您的生活更轻松。
安装
composer install bettrlife/schmancy-oo
类方法组合器
方法组合器允许您提供自动方法组合。(方法组合基本上就是调用类层次结构中所有方法的一种方式。)
例如,想象您有以下内容
class A { function M() { return 1; } } class B extends A {} class C extends B { function M() { return 2; } }
使用函数‘+’的方法组合将调用C->m(),然后调用A->m(),并将结果相加。具体来说
(new MethodCombinator(0, function ($x, $y) { $x + $y; })) ->invoke('M', new C()); // => 3
与此相对的是PHP的“标准”方法组合,您可能需要编写类似以下的内容
class A { function M() { return 1; } } class B extends A {} class C extends B { function M() { return 2 + parent::M(); } }
在这个例子中,这并不特别繁琐,但随着组合函数变得复杂或您开始添加混合特性时,它会变得非常烦人且容易出错。
new MethodCombinator($iv, $op, $includeTraits = MethodCombinator::ExcludeTraits)
创建一个新的方法组合器。传递一个初始值、一个组合器(回调函数),以及(可选)您是否希望将特性包含在MRO中。
方法 execute($class, $methodName, $instance = null, $args = [])
对一个类实例(或null,对于静态方法)运行方法组合。
方法 invoke($methodName, $instance, $args = [])
这是 ->execute() 的简写,其中 $class 是实例的类。
类 C3Linearization
实现了C3线性化算法。虽然您可能不会直接使用它,但这是本库提供其他功能的基础,如果您想构建自己的工具,它将很有用。
mro(ReflectionClass $class)
给定一个类,返回一个包含类和特性的数组,定义了尝试方法的顺序(“方法解析顺序”)。