博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php链式调用(链式操作)
阅读量:5126 次
发布时间:2019-06-13

本文共 3393 字,大约阅读时间需要 11 分钟。

2017年6月28日 10:41:19 星期三

情景:

在多次处理数组的时候, 要自定义好多个临时变量, 起名字特别麻烦

于是, 就想到利用PHP的

1.魔法方法__call

2.不定参数, 参数自动解包的特性

写了一个简单的链式操作类:

调用举例:

1 $arr = [ 2     ['id' => 1, 'name' =>'111'], 3     ['id' => 2, 'name' =>'222'], 4     ['id' => 3, 'name' =>'333'], 5     ['id' => 4, 'name' =>'333'], 6     ['id' => 5, 'name' =>''], 7 ]; 8  9 echo Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique(); // {"1":"111","2":"222","3":"333"} 调用__toString10 Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->count()->strval()->echo(); // 311 Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->reset()->var_dump(); // string(3) "111"12 Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->end()->echo(); // 33313 var_dump(Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->empty()); //bool(false)14 echo Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->get(1); //11115 echo Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->get(5); //016 Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->json_encode()->exit(); // {"1":"111","2":"222","3":"333"}17 Data::ini($arr)->array_column('name', 'id')->array_filter()->array_unique()->implode(',')->echo();18 Data::ini('aaa^111|bbb^222|ccc^333')->explode('|')->json_encode()->echo();

 代码文件: 

1 
data) 6 * 本类中有些函数名跟PHP自带函数一样, 需要php7以上支持(PHP7优化了词法分析器, 可以做出区分) 7 */ 8 class Data 9 {10 public $data = null;11 12 public function __construct($data)13 {14 $this->data = $data;15 }16 17 //没有起名为getInstance或init是因为 "ini"三个字母可以只用右手就可以敲出来18 public static function ini($data)19 {20 return new Data($data);21 }22 23 /*24 * 核心代码25 * 利用可变函数(变量函数)去隐式调用PHP自带函数26 * 可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。27 * http://www.php.net/manual/zh/functions.variable-functions.php28 */29 public function __call($func, $args) 30 {31 $this->data = $func($this->data, ...$args);32 return $this;33 }34 35 public function get($key, $default='0')36 {37 // return $this->data[$key] ?? $default;38 return isset($this->data[$key]) ? $this->data[$key] : $default;39 }40 41 public function group($key)42 {43 $new = array();44 foreach ($this->data as $v) {45 $new[$v[$key]][] = $v;46 }47 $this->data = $new;48 return $this;49 }50 51 public function implode($char='')52 {53 $this->data = implode($char, $this->data);54 return $this;55 }56 57 public function explode($char)58 {59 $this->data = explode($char, $this->data);60 return $this;61 }62 63 public function empty()64 {65 return empty($this->data);66 }67 68 public function echo()69 {70 echo $this->data;//参数为整型时会被当作状态码返回 e.g. 200/404/500.... 浏览器无输出71 }72 73 public function exit()74 {75 exit($this->data); //参数为整型时会被当作状态码返回 e.g. 200/404/500.... 浏览器无输出76 }77 78 //echo exit 时默认调用此函数79 public function __toString()80 {81 return json_encode($this->data);82 }83 84 }

 

转载于:https://www.cnblogs.com/iLoveMyD/p/7088685.html

你可能感兴趣的文章
timeline时间轴进度“群英荟萃”
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>