bettrlife/schmancy-oo

花哨的面向对象工具。

dev-master 2015-11-12 18:02 UTC

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)

给定一个类,返回一个包含类和特性的数组,定义了尝试方法的顺序(“方法解析顺序”)。