每个项目都写 helper? 为什么不自己搞一个呢?给你一个不一样的 PHP-tools 分享
工具包分享
相信每个人都有这样的问题,每开一个新项目,都要写一个 helper 文件,复制粘贴是挺方便。
但是后续维护新增一个方法,就需要复制到每个 helper,这样真的好吗?
9102 年了,在现在这种项目趋于服务化的形势下,业务拆分的模块只多不少,还要这么 low 的复制吗?
9102 年了,我们还不好好使用 composer 吗?
9102 年了,你该有一个属于自己的工具包了。
在这里分享一下我自己的工具包:yiranzai/php-tools,很多东西都参考了 laravel
ps: 我不是说一定要让你用我的包,毕竟第一我的包内容有限,第二这种东西更应该发布在内部的仓库上,composer.json 是可以指定包的来源的
仅供参考,欢迎批评和pr
个人推荐
这一段理解为王婆卖瓜
查看完整直接看下边 用户手册
\Yiranzai\Tools\Arr::sortBy()
使用给定的回调对数组进行排序并保留原始键,支持多列排序,特别实用。
\Yiranzai\Tools\Date::toCarbon($dateTime, $default)
生成 Carbon 对象,不合法数据会返回默认值
\Yiranzai\Tools\Date::timeDiffFormat($leftTime, $rightTime, $absolute)
人性化显示两个 DateTime 对象的差,9102 年了,我的同事还在
strtotime()
相减然后慢慢取余呢\Yiranzai\Tools\Math::formatDiv()
四舍五入除法,基于 bcmath,不用担心除数为 0 的问题
\Yiranzai\Tools\Tools::iteratorGet()
获取一个对象或者一个数组的属性,如果属性或者 key 不存在,返回默认值,如果默认值是一个异常,抛出异常。(对于手动校验的参数相当实用)
\Yiranzai\Snowflake\SnowFlake::next()
雪花算法生成 64 位 id,这个自行搜索雪花算法
\Yiranzai\Snowflake\SnowFlake::analysis()
// 解析 64 位 id解析雪花算法生成的 64 位 id
用户手册
Arr::class
\Yiranzai\Tools\Arr::sortBy()
// 使用给定的回调对数组进行排序并保留原始键,支持多列排序\Yiranzai\Tools\Arr::arrSortByField()
// 二维数组排序\Yiranzai\Tools\Arr::arrGroup()
// 数组按字段分组\Yiranzai\Tools\Arr::heapSort()
// 堆排序\Yiranzai\Tools\Arr::mergeSort()
// 归并排序\Yiranzai\Tools\Arr::quickSort()
// 快速排序
Date::class
\Yiranzai\Tools\Date::toCarbon()
// 生成 Carbon 对象\Yiranzai\Tools\Date::timeDiffFormat()
// 输出两个 DateTime 对象的差距
Math::class
\Yiranzai\Tools\Math::formatDiv()
// 四舍五入 格式化除法\Yiranzai\Tools\Math::formatMod()
// 四舍五入 格式化取余(模运算)\Yiranzai\Tools\Math::formatMul()
// 四舍五入 格式化乘法\Yiranzai\Tools\Math::formatSub()
// 四舍五入 格式化减法\Yiranzai\Tools\Math::formatAdd()
// 四舍五入 格式化加法\Yiranzai\Tools\Math::gcd()
// 求两个数的最大公约数\Yiranzai\Tools\Math::gcdArray()
// 求一个数组的最大公约数
Filesystem::class
\Yiranzai\Tools\Filesystem::hash()
// 获取给定路径上的文件的 MD5 哈希值。\Yiranzai\Tools\Filesystem::prepend()
// 将内容存储到到文件开头。\Yiranzai\Tools\Filesystem::exists()
// 确定文件或目录是否存在。\Yiranzai\Tools\Filesystem::put()
// 将内容存储在文件中。\Yiranzai\Tools\Filesystem::makeDirectory()
// 创建一个目录。\Yiranzai\Tools\Filesystem::get()
// 获取文件的内容。\Yiranzai\Tools\Filesystem::isFile()
// 确定给定路径是否为文件。\Yiranzai\Tools\Filesystem::sharedGet()
// 获取具有共享访问权限的文件的内容。\Yiranzai\Tools\Filesystem::size()
// 获取给定文件的文件大小。\Yiranzai\Tools\Filesystem::append()
// 将内容存储到到文件结尾(追加)。\Yiranzai\Tools\Filesystem::chmodFile()
// 获取或设置文件或目录的 UNIX 模式。\Yiranzai\Tools\Filesystem::move()
// 将文件移动到新位置。\Yiranzai\Tools\Filesystem::name()
// 从文件路径中提取文件名。\Yiranzai\Tools\Filesystem::basename()
// 从文件路径中提取尾随名称组件。\Yiranzai\Tools\Filesystem::dirname()
// 从文件路径中提取父目录。\Yiranzai\Tools\Filesystem::extension()
// 从文件路径中提取文件扩展名。\Yiranzai\Tools\Filesystem::type()
// 获取给定文件的文件类型。\Yiranzai\Tools\Filesystem::mimeType()
// 获取给定文件的 mime 类型。\Yiranzai\Tools\Filesystem::lastModified()
// 获取文件的上次修改时间。\Yiranzai\Tools\Filesystem::isReadable()
// 确定给定路径是否可读。\Yiranzai\Tools\Filesystem::isWritable()
// 确定给定路径是否可写。\Yiranzai\Tools\Filesystem::moveDirectory()
// 移动目录。\Yiranzai\Tools\Filesystem::isDirectory()
// 确定给定路径是否是目录。\Yiranzai\Tools\Filesystem::deleteDirectory()
// 递归删除目录。\Yiranzai\Tools\Filesystem::delete()
// 删除给定路径的文件。\Yiranzai\Tools\Filesystem::copyDirectory()
// 将目录从一个位置复制到另一个位置。\Yiranzai\Tools\Filesystem::copyFile()
// 将文件复制到新位置。\Yiranzai\Tools\Filesystem::cleanDirectory()
// 清空所有文件和文件夹的指定目录。\Yiranzai\Tools\Filesystem::windowsOs()
// 确定当前环境是否基于 Windows。
Tools::class
\Yiranzai\Tools\Tools::getNiceFileSize()
// 人性化转化内存信息\Yiranzai\Tools\Tools::callFunc()
// 调用对象的方法\Yiranzai\Tools\Tools::iteratorGet()
// 获取一个对象或者一个数组的属性\Yiranzai\Tools\Tools::arrGet()
// 获取数组中的某个元素\Yiranzai\Tools\Tools::objectGet()
// 获取对象中的某个元素
SnowFlake::class
\Yiranzai\Snowflake\SnowFlake::next()
// 生成 64 位 id\Yiranzai\Snowflake\SnowFlake::analysis()
// 解析 64 位 id
本作品采用《CC 协议》,转载必须注明作者和本文链接
还有snowflake 这个功能了,NB
@BradStevens 其实是另外写的包引入了 yiranzai/snowflake
先 star
@lmaster 老哥,这么看得起我吗?THX
写了测试用例的,稳
@xiaoniuge 写单元测试是个好习惯,要坚持,哈哈哈
@一冉再 恩的,感觉这个应用场景有点少,有这个功能挺厉害的
@一冉再 所以,要加油欧!!!
这个好,我先 fork 一份去。
我都习惯用 list($b,$a)=[$a,$b];