在PHP链接方法上使用回调



假设您有一个类,如:

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

谢谢!

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

最新更新