我了解链接方法是如何工作的,我也了解如何将属性链接为链中的最后一项,如下例所示

$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模式.

Php相关问答推荐

try 修改这个PHP代码如果语句在WordPress""

Postgrid Webhook不叫laravel

允许Laravel路由指定`withTrashed`,尽管有显式的模型绑定

PHP,ZipArchive删除一个空文件?

PHP原始数据读取引发max_input_vars错误

返回WooCommerce中的所有已启用变体

HTAccess重写一些URL,但将所有其他URL发送到另一个页面

在WooCommerce存档页面中显示可变产品的库存变化属性

防止 WooCommerce 在前端加载全尺寸图像

如何在 Laravel 迁移中使用日期时间和天数?

PHP 在数组中搜索值

从插件更改主题功能,function_exists 不起作用

通过存储库检索 Blade 上的单值数据 出错

图像未在 Laravel Ajax Crud 中显示

根据WooCommerce中的产品重量更改简单产品的输入数量步值

PHP / DOM : 解析 HTML 以提取基于类的数​​据

在帖子内容中使用短代码触发 Woocommerce 挂钩

如何将子查询结果添加到学说 2 中主查询的末尾?

使用 splat 运算符时按引用传递 (...)

图像不会显示在生产中的 Laravel 应用程序中