在Class方法中调用函数并通过第一个函数获取数据?

时间:2017-08-29 09:42:07

标签: php class

您好我如何创建一个类似这样的课程?

$shop = new shop();
$shop->cart(function ($data){
    //$data
})->coupon('hello world!');

$shop->getCoupon(); //hello world!

所以我该怎么做?我玩了Calling a function within a Class method?

的例子

我甚至拿了部分原始标题抱歉原创海报。

1 个答案:

答案 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