在 PHP 个链式方法上使用回调

Use a Callback on PHP chained methods

假设您 class 喜欢:

class Foo
{
    // maybe private or protected?

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

}

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

使用示例:

$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();

谢谢!

<?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);