phpsystem函数(PHP8完全面向对象风格的 Array 和 String 编程)PHP函数 / PHP函数与面向对象编程的结合...

wufei123 发布于 2024-06-01 阅读(14)

在 PHP 语言中操作字符串和数组一般使用 str_* 和 array_* 的系列函数,这些函数由于历史原因,命名和参数顺序风格不统一,广为开发者诟病,PHP 语言标准库中暂未提供 OO 风格的 Array 和 String 类库,开发者使用起来不是很便利,在 Swoole 中我们提供了一 swoole_array 和 swoole_string 对字符串和数组操作进行了面向对象封装,可以使用完全面向对象风格进行 Array 和 String 编程。

使用方法Swoole 项目:可直接使用非 Swoole 项目,使用 composer require swoole/library 引入绝大部分方法提供了链式风格支持,可以一路使用 -> 编写逻辑底层类库使用了 declare(strict_types=1) 强类型,使用 phpstorm 工具时,可以实现完全自动提示和自动完成。

创建数组$array1 = swoole_array([hello, world]); $array2 = swoole_array([hello => 1, world => 2]); $array3 = swoole_array_list(

hello, world, swoole, php);创建字符串// Bytes 字符串 $string1 = swoole_string(hello world, php java, swoole);

// 宽字符串 $string2 = swoole_mbstring(我是中国人); // 返回 5 $string2->length();获取元素// 获取 $value1 = $array1->get(

0); $value2 = $array2->get(hello); // 数组的第一个元素 $first = $array->first(); // 数组的最后一个元素 $last = $array->last();

增加/设置// 设置 $array1->set(0, swoole); $array2->set(world, 9); // 在末尾追加 $array1->pushBack(java); // 在头部插入

$array1->pushFront(go); // 在中间 offset 2 插入 $array1->insert(2, rust);连续追加$array1->append(rust)->append(

c++)->append(swift, kotlin); $array2->set(rust, 99)->set(c++, 88)->set(kotlin, 77);删除// 按 key 删除 $array1->delete(

0); $array2->delete(worker); // 按 value 删除 $array1->remove(hello);包含使用contains()方法可以判断数组或字符串中是否包含某个元素。

$array1->contains(java); $string1->contains(php);使用startsWith()和endsWith()方法判断字符串开头和结尾是否为指定的值$str = swoole_string(。

php and swoole); $str->startsWith(php); //true $str->startsWith(java); //false $str->endsWith(swoole

); //true $str->endsWith(golang); //false搜索// 查找数组中是否有某个值,存在则返回其 key $key = $array1->search(java);结合使用

String与Array可以结合使用$s = 11, 33, 22, 44,12,32,55,23,19,23; $data = swoole_string($s) ->split(,) ->each(fn(&$item) => $item = intval($item)) 。

/* sort() ->unique() ->join(-) ->contains(

-44-); var_dump($data);首先构建了一个字符串对象使用split按照,分割为数组遍历并应用$fn函数将元素转换为整数排序去重将数组元素使用-组合成为字符串判断字符串对象中是否包含-44-

类型推断对 swoole_array对象元素操作时,底层会自动判断它的类型,如果为数组或字符串,底层会递归封装$array = swoole_array_list([hello => swoole]); $array->get(。

0)->get(hello)->contains(swoole);性能测试底层实现其实就是基于str_和array_相关函数进行面向对象封装,没有过多性能损耗,仅为一次method调用开销我们编写了严格的单测覆盖到每个API,保证其可靠性。

性能方面,使用String::contains()执行100万次,与直接运行 php strpos差距不大swoole_string:0.059892892837524s,php_string:0.033510208129883s

然而在这里可能有PHPer说用Go不香吗?要想成为一个优秀的开发者,你应该关注解决问题层面上来,用现有的技术资源去成就商业,而不是用公司的资源去成就一门技术,为了技术而技术!如果你不能用一种语言里面的基本特性写出好的代码解决问题,那你换成另外一种语言也无济于事。

技术人员的发展一直都是“T”字型,如果连吃饭的PHP都学不好,转Java、GO语言你就能成为大牛了?而PHP学到极致就不仅限于PHP的使用,势必涉及到性能优化,算法、Swoole、微服务、分布式高并发、Linux、Kafka、MQ等不一而足;先精一门,为全面且不肤浅打基础。

为了大家能够顺利进阶架构师,我特地准备了一套精品PHP架构师教程,助你薪资突破30K。

领取方式:点赞关注小编后私信【资料】获取资料领取方式!部分资料展示:

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻68059