您好我如何创建一个类似这样的课程?
$shop = new shop();
$shop->cart(function ($data){
//$data
})->coupon('hello world!');
$shop->getCoupon(); //hello world!
所以我该怎么做?我玩了Calling a function within a Class method?
的例子我甚至拿了部分原始标题抱歉原创海报。
答案 0 :(得分:2)
你的问题有点模糊,但我认为你所说的是Fluent Interface。它们背后的想法是通过让每个方法返回实例,使您能够在单个实例上调用多个方法。它通常用于类的setter,并使您能够编写如下代码:
$foo = new Foo();
$foo
->setThisThing()
->setAnotherThing()
->setThingToParameter($parameter)
...;
而不是
$foo->setThisThing();
$foo->setAnotherThing();
...
无论你发现这种情况好坏,都是品味问题,but Fluent interfaces do come some drawbacks
在您的情况下,商店类可能如下所示:
<?php
class shop
{
private $couponText;
public function cart($function) {
// Do something with $function here
return $this;
}
public function coupon($couponText) {
$this->couponText = $couponText;
return $this;
}
public function getCoupon() {
return $this->couponText;
}
}
关键部分是return $this;
行 - 它们允许您将后续方法调用链接到彼此,如您的示例所示。
有关示例,请参阅https://eval.in/851708。