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

发布时间 - 2026-01-10 22:42:28    点击率:

在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是:

strlen(trim($str))

如果要实现类似js中的链式操作,比如像下面这样应该怎么写?

$str->trim()->strlen()

下面分别用三种方式来实现:

方法一、使用魔法函数__call结合call_user_func来实现

思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()和strlen()函数,通过在调用的魔法函数__call()中使用call_user_func来处理调用关系,实现如下:

<?php
class StringHelper 
{
  private $value;
  
  function __construct($value)
  {
    $this->value = $value;
  }

  function __call($function, $args){
    $this->value = call_user_func($function, $this->value, $args[0]);
    return $this;
  }

  function strlen() {
    return strlen($this->value);
  }
}

$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();

终端执行脚本:

php test.php

8

方法二、使用魔法函数__call结合call_user_func_array来实现

<?php
class StringHelper 
{
  private $value;
  
  function __construct($value)
  {
    $this->value = $value;
  }

  function __call($function, $args){
    array_unshift($args, $this->value);
    $this->value = call_user_func_array($function, $args);
    return $this;
  }

  function strlen() {
    return strlen($this->value);
  }
}

$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();

说明:

array_unshift(array,value1,value2,value3...)

array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

call_user_func()和call_user_func_array都是动态调用函数的方法,区别在于参数的传递方式不同。

方法三、不使用魔法函数__call来实现

只需要修改_call()为trim()函数即可:

public function trim($t)
{
  $this->value = trim($this->value, $t);
  return $this;
}

重点在于,返回$this指针,方便调用后者函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# PHP  # 链式操作  # PHP实现的连贯操作、链式操作实例  # PHP简单数据库操作类实例【支持增删改查及链式操作】  # PHP对象链式操作实现原理分析  # PHP实现链式操作的核心思想  # PHP实现链式操作的原理详解  # PHP实现链式操作的三种方法详解  # php类自动装载、链式操作、魔术方法实现代码  # PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例  # thinkPHP5框架数据库连贯操作之cache()用法分析  # thinkphp连贯操作实例分析  # php链式操作的实现方式分析  # 链式  # 来实现  # 求出  # 都是  # 中有  # 三种  # 将被  # 只需要  # 要先  # 大家多多  # __call  # strong  # style  # span  # color  # gt  # class  # brush 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何生成腾讯云建站专用兑换码?  高端建站如何打造兼具美学与转化的品牌官网?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Android自定义listview布局实现上拉加载下拉刷新功能  米侠浏览器网页背景异常怎么办 米侠显示修复  如何快速打造个性化非模板自助建站?  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  微信小程序制作网站有哪些,微信小程序需要做网站吗?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何处理表单验证?(Requests代码示例)  js代码实现下拉菜单【推荐】  中山网站推广排名,中山信息港登录入口?  Android使用GridView实现日历的简单功能  音乐网站服务器如何优化API响应速度?  Laravel如何自定义错误页面(404, 500)?(代码示例)  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  iOS正则表达式验证手机号、邮箱、身份证号等  香港服务器部署网站为何提示未备案?  详解vue.js组件化开发实践  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何基于云服务器快速搭建个人网站?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  利用vue写todolist单页应用  微信小程序 闭包写法详细介绍  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何在橙子建站上传落地页?操作指南详解  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何在七牛云存储上搭建网站并设置自定义域名?  JS碰撞运动实现方法详解  ,交易猫的商品怎么发布到网站上去?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  百度浏览器如何管理插件 百度浏览器插件管理方法  南京网站制作费用,南京远驱官方网站?  javascript中闭包概念与用法深入理解  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  开心动漫网站制作软件下载,十分开心动画为何停播?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  企业网站制作这些问题要关注