PHP中的__toString方法(实现JS里的链式操作)

_toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错

Catchable fatal error: Object of class String could not be converted to 

示例:

PHP里有很多的字符串函数,假如要先过滤字符首尾的空格,再求出字符串的长度,一般会这么写:
strlen(trim($str));
如果要实现JS里的链式操作,比如像下面这样,应该怎么实现?
$str->trim()->strlen()
很简单,先实现一个String类,对这个类的对象调用方法进行处理时,触发__call魔术方法,接着执行call_user_func或者call_user_func_array即可.
以下是简单的实现
<?php
class String
{public $value;//字符串的值public function __construct($str){$this->value = $str;}public function __call($method, $args){array_push($args,$this->value);$this->value = call_user_func_array($method,$args);return $this;}//打印对象时返回对象的value值public function __toString(){return  strval($this->value);}
}
$str = new String('20150816');
echo $str->trim()->strtotime()->date('Y年m月d日');

运行结果如下

2015年08月16日

PHP的__toString魔术方法的设计原型来源于Java,Java中也有这么一个方法,而且在Java中,这个方法被大量使用,对于调试程序比较方便. 实际上,__toString方法也是一种序列化, PHP自带的serialize/unserialize也是进行序列化的, 但是这组函数序列化时会产生一些无用信息,如属性字符串长度,造成存储空间无谓浪费.因此,可以实现自己的序列化和反序列化方法,或者json_encode/json_decode也是一个不错的选择

转载于:https://www.cnblogs.com/chenqionghe/p/4735720.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何有效地使用反射

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

从字符串 const str = ‘qwbewrbbeqqbbbweebbbbqee‘;中能得到结果 [“b“, “bb“, “bbb“, “bbbb“] 以下错误语句是?

从字符串 const str qwbewrbbeqqbbbweebbbbqee;中能得到结果 ["b", "bb", "bbb", "bbbb"] 以下错误语句是&#xff1f;(B) A.str.match(/b/g) B.str.match(/b*/g) C.str.match(/b{1,4}/g) D.str.match(/b{1,5}/g) 解析&#xff1…

Burp Collaborator 使用总结

0x00&#xff1a;使用原因 我们在做渗透测试的时候&#xff0c;经常会遇到这种情况&#xff0c;测试跨站可能有些功能插入恶意脚本后无法立即触发&#xff0c;例如提交反馈表单&#xff0c;需要等管理员打开查看提交信息时才会触发&#xff0c;或者是盲注跨站&#xff0c;盲打 …

安装phpssdb扩展:

安装 igbinary 扩展(安装phpssdb扩展时候要用到--enable-ssdb-igbinary): clone https://github.com/igbinary/igbinary.git 安装phpssdb 扩展 &#xff1a;git clone https://github.com/jonnywang/phpssdb.git ; phpssdb 安装文档&#xff1a;https://github.com/jon…

在HTML中嵌入PHP代码,有以下几种方法,其中错误的是( )

在HTML中嵌入PHP代码&#xff0c;有以下几种方法&#xff0c;其中错误的是&#xff08; D&#xff09; A.以”<?php开头&#xff0c;以“?>”结束&#xff0c;中间为PHP代码。 B.以<script language“php”>开头&#xff0c;</script> 结束&#xff0c;中…

各大src地址

一、目录&#xff08;以下排名不分先后&#xff09; 1.360安全应急响应中心&#xff08;360SRC&#xff09;&#xff0d;http://security.360.cn/ 2.联想安全应急响应中心&#xff08;LSRC&#xff09;&#xff0d;http://lsrc.lenovo.com/ 3.腾讯安全应急响应中心&#xff…

文本”Hello, world.”显示的颜色是?

文本”Hello, world.”显示的颜色是? <style> #content .text {text-color:red;} #content>.title {color:green;} #content div.title {font-color:blue;} strong {font-color:yellow;} * {color:black;} </style> <div id"content"> <…

jrockit_1.6下载_Oracle JRockit Mission Control 4.1发布

jrockit_1.6下载Oracle发布了以前的仅JRockit专用工具Mission Control Suite&#xff08;JRMC&#xff09;的新版本。 4.1版本是次要版本升级&#xff0c;直接遵循4.0.1&#xff08;该版本发布于2010年中期&#xff09;。 但是&#xff0c;即使版本号表明是次要的升级&#xff…

dnslog盲注原理

Dnslog盲注原理 布尔盲注和时间盲注相当于猜单词的游戏&#xff0c;我们需要对每一位逐步的猜测&#xff0c;效率很低&#xff0c;需要发送很多的请求进行判断&#xff0c;很可能会触发安全设备的防护 我们需要一种方式能够减少请求&#xff0c;直接回显数据——Dnslog注入 Dn…

Sharepoint Ribbon Loaction

https://msdn.microsoft.com/zh-cn/library/ee537543%28voffice.14%29?f255&MSPPError-2147217396 列表视图相关loaction: Ribbon.List.CustomViews转载于:https://www.cnblogs.com/qiumc/p/4795020.html

JavaScript实现继承的方式,不正确的是:

JavaScript实现继承的方式&#xff0c;不正确的是&#xff1a;DA.原型链继承 B.构造函数继承 C.组合继承 D.关联继承 解析 javaScript实现继承共6种方式&#xff1a; 原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。

如何创建和销毁对象

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

msf各种弱口令爆破

msf各种弱口令爆破 Msf: 记录下msf各个爆破弱口令的模块 run post/windows/gather/arp_scanner RHOSTS10.10.10.0/24 使用arp_scanner模块 检测在线主机 metasploit 增加路由 route add 10.10.1.3 255.255.255.0 1使用扫描模块 use scanner/portscan/tcp爆破ssh Msf>us…

[学习笔记]批次需求计划系统-简要

一、该系统的目的二、系统特色(1)来源根据 如上图(2)仅仅补充需求来源的最大值&#xff0c;避免料件多买而造成浪费(3)可透过[发放LRP工单]将生产计划发放成正式工单(4)可透过[发放LRP採购单]将採购计划发放成正式的请购单或者採购单(5)系统会记录计划的来源单据&#xff0c;方…

在浏览器控制台执行以下代码,输入的结果是()

在浏览器控制台执行以下代码,输入的结果是(A) A.4400 4401 4399 4400 B.4400 4401 4401 4402 C.4400 4400 4399 4400 D.4400 4401 4399 4402 E.4400 4401 4401 4400 解析 js在执行之前

iOS-心跳

转载于:https://www.cnblogs.com/zhuyaguang/p/4800703.html

google国内镜像网址收集

搞IT的遇到问题&#xff0c;光靠baidu有时真的解决不了问题&#xff0c;所以时不时的就需要求助google&#x1f602;&#xff0c; 里面有好多国外网友的博客、stackoverflow、github issues、官方文档等等的大量一手英文资料&#xff0c; 但是因为种种原因国家一直不放开Google…

根据 HTML 规范,以下代码中,外层容器 .outer 的宽高分别是:

根据 HTML 规范&#xff0c;以下代码中&#xff0c;外层容器 .outer 的宽高分别是&#xff1a;B <style> .outer { height: 50px; } .inner { width: 120px; height: 100px; } </style><div class"outer"> <span class"inner">co…

分而治之_播放框架模块:分而治之

分而治之通常情况是您开始开发应用程序并继续满足需求。 当您的应用程序变得更大时&#xff0c;您开始意识到将其分为不同组件的便利。 而且&#xff0c;当您开发第二个或第三个应用程序时&#xff0c;您开始认识到可以在不同应用程序之间重用的某些功能。 这是模块化应用程序的…

Mysql身份认证漏洞及利用(CVE-2012-2122)

当连接MariaDB/MySQL时&#xff0c;输入的密码会与期望的正确密码比较&#xff0c;由于不正确的处理&#xff0c;会导致即便是memcmp()返回一个非零值&#xff0c;也会使MySQL认为两个密码是相同的。 也就是说只要知道用户名&#xff0c;不断尝试就能够直接登入SQL数据库。按照…