我了解链接方法是如何工作的,我也了解如何将属性链接为链中的最后一项,如下例所示
$tank = $bmw -> fill(10) -> ride(40) -> tank;
但是,如果在两个方法之间链接一个属性,这是如何工作的呢?该属性是一种秘密的方法吗?下面是一个例子
expect(2,2)->not->toBeGreaterThan(3)
我正在学习php在幼体的背景下,所以如果这是一个幼体唯一的事情,让我知道.
我已经做了尽职调查,也查了好几次,但都找不到我想要的答案.
我了解链接方法是如何工作的,我也了解如何将属性链接为链中的最后一项,如下例所示
$tank = $bmw -> fill(10) -> ride(40) -> tank;
但是,如果在两个方法之间链接一个属性,这是如何工作的呢?该属性是一种秘密的方法吗?下面是一个例子
expect(2,2)->not->toBeGreaterThan(3)
我正在学习php在幼体的背景下,所以如果这是一个幼体唯一的事情,让我知道.
我已经做了尽职调查,也查了好几次,但都找不到我想要的答案.
Expect(2,2)可能返回Expectation
个类的实例.not
实际上是PHP中的一个方法__get
,它返回相同或其他类的实例,并将某个状态标记为"否定断言".toBeGreaterThan(3)
是用于执行断言的方法.
这是期望值类:
(new Expectation(2))->not->toBeGreaterThan(3);
class Expectation {
protected $negate = false;
protected $value;
public function __construct($value) {
$this->value = $value;
}
public function __get($name) {
if ($name === 'not') {
$this->negate = true;
return $this;
}
}
public function toBeGreaterThan($limit) {
if ($this->negate) {
assert($this->value <= $limit, "Expected value not to be greater than $limit");
} else {
assert($this->value > $limit, "Expected value to be greater than $limit");
}
}
}
当您访问$this->not
时,PHP将使用‘not’作为其参数来调用魔术__get
方法.在该方法中,您可以决定要返回什么.在本例中,它翻转"Negate"标志并返回相同的对象.
此外,这并不是拉维尔唯一的事情.这是一种更通用的PHP模式.