如何创建像laravel这样的类来连续调用类方法

Posted

技术标签:

【中文标题】如何创建像laravel这样的类来连续调用类方法【英文标题】:how to create class like laravel to call class methodes consecutive 【发布时间】:2022-01-17 04:16:27 【问题描述】:

大家好,我的问题是如何编写诸如 laravel 之类的类。 我认为这种类型的类更易于使用 代码示例:

ClassName::method1('value')->method2('value')->method3('value');

如果你的注意力方法是使用连续的

我在 laravel 的路线部分看到了这种类,所以我对这个类很感兴趣,我想在我自己的程序中使用它!

这种方式在加载时有效吗?

我很乐意为您提供示例 如果你能解释一下

谢谢。

【问题讨论】:

在 Google 上查找“php Method Chaining”或“PHP Fluid Interface”并阅读其中的一些结果。基本原理是每个方法都返回“自身”,因此您可以将它们链接在一起,但是如果您足够努力地搜索它们,有很多关于如何做到这一点的教程。 【参考方案1】:

以下示例可能有助于理解方法链的概念。

方法one()two()three()在返回当前对象之前分别设置一个属性,使用return $this

返回$this(对象)允许链接方法,因为您可以在返回的对象上调用另一个方法:

<?php
class Movie

    private string $one = '';
    private string $two = '';
    private string $three = '';

    public function one(): object
    
        $this->one = "One ";
        return $this; // return object
    

    public function two(): object
    
        $this->two = "Flew Over the ";
        return $this; // return object
    

    public function three(): object
    
        $this->three = "Cuckoo's Nest";
        return $this; // return object
    

    public function show(): string
    
        return $this->one . $this->two . $this->three;
    



$movie = new Movie();
echo $movie->one()->two()->three()->show();

查看action

【讨论】:

以上是关于如何创建像laravel这样的类来连续调用类方法的主要内容,如果未能解决你的问题,请参考以下文章

课堂作业06——设计模式综述

java中有哪些类型的方法,如何调用它们?

调用类方法 - 输入参数过多

如何在 python 中使用元类来增加或覆盖添加到类中的方法

Cglib方法实现动态代理

从Ruby中的实例方法调用受保护的类方法