【问题标题】:Use a Callback on PHP chained methods在 PHP 链式方法上使用回调
【发布时间】:2021-12-22 16:10:19
【问题描述】:

假设你有这样一个类:

class Foo
{
    // maybe private or protected?

    public Pages $pages; 
    public Owners $owners;
    
    // ...

}

如何实现以链式方式接受闭包的方法?链中的每个方法调用都应该更新内部类属性(因此它们使用的是最新的)。

用法示例:

$pagesArray = Foo::wherePage('page', function ($page, $owners) {
    // do something with the given page, owners is optional
})->b(function ($owners) {
    // now do something with owners, e.g. $owners->foo();
})->getPagesArray();

或者

$pagesArray = Foo::pages(function ($pages, $owners) {
    // loop pages, owners is optional
})->b(function ($owners) {
    // now do something with owners, e.g. $owners->foo();
})->getPagesArray();

谢谢!

【问题讨论】:

  • 什么不起作用?是“连锁时尚”的一部分吗?你能证明你的wherePage()pages() 的实现不起作用吗?

标签: php architecture closures


【解决方案1】:
<?php


class Foo
{


    protected $pages = ['abc'];


    public static function setPages($pages)
    {
        call_user_func($pages, ['aaa']);
        $thisClass = new static();
        return $thisClass;
    }


    public function owners($owners)
    {
        call_user_func($owners, ['john', 'wick']);
        return $this;
    }


    public function getPages()
    {
        return $this->pages;
    }

    
}


$Foo = Foo::setPages(function($pages) {
    var_dump($pages);
})->owners(function($owners) {
    var_dump($owners);
})->getPages();
var_dump($Foo);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2014-06-07
    • 2022-11-22
    相关资源
    最近更新 更多