在 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);
假设您 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);