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缓存驱动和应用优化方案
企业网站制作这些问题要关注

