PHP实现链式操作的三种方法详解

PHP实现链式操作的三种方法详解

在PHP中,使用链式操作可以让代码看起来更加简洁,易于维护。针对于链式操作,本文将介绍三种实现方法,分别是使用普通函数、使用魔术方法和使用静态方法。

方法一:使用普通函数

使用普通函数实现链式操作,就是在每个函数的末尾都返回对象本身,这样就可以实现链式调用。

示例1:

class Chain{
    private $var;

    public function __construct($var) {
        $this->var = $var;
    }

    public function add($value) {
        $this->var += $value;
        return $this;
    }

    public function sub($value) {
        $this->var -= $value;
        return $this;
    }

    public function mul($value) {
        $this->var *= $value;
        return $this;
    }

    public function result() {
        return $this->var;
    }
}

$chain = new Chain(10);
$result = $chain->add(5)->sub(3)->mul(2)->result(); // 24

示例2:

class User{
    private $name;
    private $age;

    public function __construct($name, $age){
        $this->name = $name;
        $this->age = $age;
    }

    public function setName($name){
        $this->name = $name;
        return $this;
    }

    public function setAge($age){
        $this->age = $age;
        return $this;
    }

    public function getInfo(){
        return "Name: ".$this->name." Age: ".$this->age;
    }
}

$user = new User('Tom', 20);
$info = $user->setName('Jerry')->setAge(25)->getInfo(); // "Name: Jerry Age: 25"

## 方法二:使用魔术方法
使用魔术方法__call可以在对象中任意添加方法,灵活性更高。

### 示例1:
```php
class Demo {
    private $var;

    public function __construct($var) {
        $this->var = $var;
    }

    public function __call($name, $arguments) {
        switch ($name) {
            case 'add':
                $this->var += $arguments[0];
                return $this;
            case 'sub':
                $this->var -= $arguments[0];
                return $this;
            case 'mul':
                $this->var *= $arguments[0];
                return $this;
            case 'result':
                return $this->var;
        }
    }
}

$demo = new Demo(10);
$result = $demo->add(5)->sub(3)->mul(2)->result(); // 24

示例2:

```php
class User{
private $name;
private $age;

public function __construct($name, $age){
    $this->name = $name;
    $this->age = $age;
}

public function __call($name, $arguments) {
    if (substr($name, 0, 3) === 'set') {
        $property = strtolower(substr($name, 3));
        if (property_exists($this, $property)) {
            $this->$property = $arguments[0];
            return $this;
        }
    }
}

public function getInfo(){
    return "Name: ".$this->name." Age: ".$this->age;
}

}

$user = new User('Tom', 20);
$info = $user->setName('Jerry')->setAge(25)->getInfo(); // "Name: Jerry Age: 25"

方法三:使用静态方法

使用静态方法不需要创建对象实例,直接在类上使用方法完成操作。

示例1:

```php
class Chain{
private static $var;

public static function set($var){
    self::$var = $var;
    return new self;
}

public function add($value) {
    self::$var += $value;
    return $this;
}

public function sub($value) {
    self::$var -= $value;
    return $this;
}

public function mul($value) {
    self::$var *= $value;
    return $this;
}

public function result() {
    return self::$var;
}

}

$result = Chain::set(10)->add(5)->sub(3)->mul(2)->result(); // 24

示例2:

```php
class User{
private static $name;
private static $age;

public static function setName($name){
    self::$name = $name;
    return new self;
}

public static function setAge($age){
    self::$age = $age;
    return new self;
}

public static function getInfo(){
    return "Name: ".self::$name." Age: ".self::$age;
}

}

$info = User::setName('Jerry')->setAge(25)->getInfo(); // "Name: Jerry Age: 25"

综上所述,以上三种方法都可以实现链式操作,使用时可以根据需要选择不同的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现链式操作的三种方法详解 - Python技术站

(1)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php中用foreach来操作数组的代码

    当我们需要循环操作数组时,在php中使用foreach是非常方便和常用的方式。下面是使用foreach来操作数组的完整攻略: 1. foreach语法介绍 foreach语法如下: foreach (数组 as $key => $value) { //执行代码 } 其中,“数组”是需要循环操作的数组变量,它可以是一个数组,也可以是一个通过函数或方法返回…

    PHP 2023年5月26日
    00
  • php将数组存储为文本文件方法汇总

    下面我将详细讲解“php将数组存储为文本文件方法汇总”的完整攻略。 1. 介绍 在PHP编程中,经常需要将数组持久化地存储到文本文件中。下面就是一些将PHP数组存储为文本文件的方法,以及如何在读取时使用它们。 2. 将数组存储为CSV文件 CSV(Comma Separated Values)是一种常见的文本文件格式,通常用于存储和交换表格数据。如果要将PH…

    PHP 2023年5月26日
    00
  • 微信小程序-form表单提交代码实例

    微信小程序-form表单提交代码实例攻略 在微信小程序中,我们可以使用form表单来收集用户的信息,并将其提交到指定的接口进行处理。本文将详细讲解如何创建和使用form表单,在提交数据时如何处理和验证数据,以及如何处理提交的结果。 创建form表单 要创建一个form表单,我们需要在wxml文件中使用form标签,例如: <form bindsubmi…

    PHP 2023年5月23日
    00
  • FileZilla绿色版基础使用教程

    FileZilla绿色版基础使用教程 什么是FileZilla绿色版? FileZilla是一款免费开源的FTP客户端软件,可以在Windows、Linux、macOS等操作系统上使用。它提供了一个用户友好的界面,可以让您方便地上传、下载、管理文件,支持FTP、SFTP和FTP over TLS(FTPS)等多种协议,并支持IPv6,适用于各种FTP服务器。…

    PHP 2023年5月27日
    00
  • 我的论坛源代码(八)

    下面是关于“我的论坛源代码(八)”的完整攻略: 介绍 “我的论坛源代码(八)”是一篇文章,作者在其中分享了自己编写的一个基于Python和Flask框架的论坛应用的源代码。代码包含了用户注册、登录、发布帖子等论坛常见功能,可以帮助初学者更好地理解和学习Web应用的开发。 使用方法 安装依赖 在使用本应用之前,你需要先安装必要的依赖库。可以通过以下命令来安装:…

    PHP 2023年5月30日
    00
  • PHP构造二叉树算法示例

    PHP构造二叉树算法示例 二叉树(Binary Tree),是由节点组成,每个节点最多有两个子树的树结构。在二叉树中,如果把所有非叶子节点的度看做2,则每个节点的度为0、1或2,因此可以看做是一种特殊的树。 如何在PHP中构造二叉树呢?下面将详细讲解PHP构造二叉树算法示例的完整攻略。 步骤1. 定义节点类 二叉树由节点组成,因此第一步是定义节点类。 cla…

    PHP 2023年5月27日
    00
  • 你真的了解PHP中的引用符号(&)吗

    当在 PHP 中使用变量时,有一种特殊的情况需要注意,即使用引用符号 &。使用引用符号 & 可以将变量的引用传递给函数或者其他变量,这意味着当引用变量的值发生改变时,其所有引用的地方都会受到影响。 一般情况下,PHP 中的变量是以值传递方式进行传递的,这意味着函数中对变量的更改不会影响到其它位置的值。但当使用引用符号 & 时,变量的引…

    PHP 2023年5月24日
    00
  • php开发分页实现代码第3/3页

    首先我们来解析一下“php开发分页实现代码第3/3页”这个题目。 题目中提到了分页实现,因此我们应该可以知道这是一个分页的教程。而“php开发”也可以显示出这个教程的适用对象是使用PHP语言进行开发的人群。最后,“第3/3页”则可以暗示该教程是一个多页的文章。 基于以上推测,我们可以将教程的目录设计成以下形式: 第一页:介绍分页的实现原理及准备工作,包括数据…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部