thejawker/chainable

暴露一个类,使方法链调用更加流畅和简单。

0.0.5 2017-12-13 08:15 UTC

This package is auto-updated.

Last update: 2024-09-19 09:51:57 UTC


README

你是否厌倦了使用需要你编写如下代码的包?

$someClass = new SomeClass();
$someClass->someMethod();
$someClass->someOtherMethod();

// Now you can just write it like this.
new Chain(SomeClass::class)
    ->someMethod()
    ->someOtherMethod();
    
// Or even easier
ch(SomeClass::class)
    ->someMethod()
    ->someOtherMethod();

安装

通过 Composer 需求此包

composer require thejawker/chainable

用法

基本用法

你可以根据喜好或需求,以两种简单的方式使用 Chain。

// Through passing the Class's classname.
$someClass = new Chain(SomeClass::class);

// Or through passing the actual instance
$someClass = new Chain(new SomeClass($withParams))

获取属性

获取属性与之前相同,这些不会返回 $this

$property = new Chain(SomeClass::class)->property;

跳出链式调用

通常方法需要返回实际值,否则我们可以停止编程。Chain 允许你轻松关闭链式调用行为。这可以非常容易地完成。

$someClass = new Chain(SomeClass::class)->someMethod()
$property = $someClass->escape()->getValue() // will return the original value

你也可以取消跳出来恢复 Chainable 功能。说实话,我还没有找到这个用例,但嘿!谁知道呢!

$someClass = new Chain(SomeClass::class)->someMethod();
$sameInstance = $someClass->escape();
$sameInstance->unescape()->otherMethod();

获取原始实例

有时需要返回原始实例,因为某些代码可能正在检查它是否为类的 instanceof。你可以在那里轻松链式调用 ->instance() 方法,并返回原始实例,而不是克隆,是实际的东西。注意:从这里无法返回。

public function calculate() 
{
    return new Chain(new LegacyClass)
        ->someMethod()
        ->setSome('stuff')
        ->maybeMore()
        ->instance();
}

想成为专业人士吗?

我还为那些认为实例化 Chain 是太多工作的朋友提供了一个方便的快捷方式。以下将产生完全相同的结果,但更容易。

ch(LegacyClass::class)
    ->also()
    ->works('yay!')
    ->fuckYess();

测试

我包括了一些测试,如果你看到有改进的空间,请随意发送 pull-requests。

composer test

许可

MIT 许可证 (MIT)。请参阅 许可文件 获取更多信息。