我将介绍一些我只用过但非常实用的 FuelPHP 函数!

大家好,
我是Mandai,Wild团队负责开发工作的成员。

在开发过程中,无需查阅文档即可轻松创建用于组合自定义便捷函数的实用类,但框架通常会自带一套优秀的实用函数。由于
文档可能使用英文,或者功能数量庞大,难以面面俱到,因此我想整理一份我认为特别有用的 FuelPHP 类和函数列表。

Arr::pluck()

我这就直接切入正题,但这真的非常有用。
这些英文单词对我来说太陌生了(就我的词汇量而言),以至于我第一眼没看懂它的意思,但如果我说它是 array_keys 函数的扩展版本,或许更容易理解。

顾名思义,array_keys 是一个提取数组的键并返回一个以这些键为值的新数组的函数,但 Arr::pluck() 是一个有用的函数,它还可以处理对象属性,并且可能对配对模型很有用。

class Item { public $name; public $value; public $color_id; public function __construct($name, $value, $color_id) { $this->name = $name; $this->value = $value; $this->color_id = $color_id; } } $items = []; $items[] = new Item('香氛橡皮擦(红色)', 150, 1); $items[] = new Item('香氛橡皮擦(蓝色)', 150, 2); $items[] = new Item('香氛橡皮擦(黄色)', 150, 3); $color_ids = Arr::pluck($items, 'color_id'); var_export($color_ids); // 结果为 // 数组 ( // 0 => 1, // 1 => 2, // 2 => 3, // )

 
这可能有点难理解,但一旦你用过它,应该就能明白了。
因为它内部会进行类型检查并将处理过程分离,所以即使处理纯数组也不会有问题。但即使是数组,它也不会将数据传递给 `array_keys`,所以如果你确定它是一个数组,直接使用 `array_keys` 可能更快。

 

事件类

FuelPHP 允许您在每个进程开始之前或结束后插入代码。
具体来说,您需要在 config 目录下创建一个 event.php 文件,并像其他配置文件一样,使用数组来指定事件。

return [ 'fuelphp' => [ 'app_created' => function(){}, 'request_created' => function(){}, 'request_started' => function(){}, 'controller_started' => function(){}, 'controller_finished' => function(){}, 'response_created' => function(){}, 'request_finished' => function(){}, 'shutdown' => function(){}, ], ];

 
这涉及到使用匿名函数在数组中添加处理逻辑。
此外,对于那些想在 return 语句之前编写处理逻辑但又不想将其全局写入的用户,可以使用以下方法:

return call_user_func(function(){ // 在此处编写所有事件的通用处理 $a = 'hogehoge'; // 例如... return [ 'shutdown' => function() use ($a){ Log::debug($a); }, ]; });

 
无论访问模式如何,事件都会执行,因此请小心,不要使用过于花哨的方式,否则可能会出现奇怪的错误。

 

Date::days_in_month()

顾名思义,该函数返回给定月份的天数。

$year = 2016; $month = 6; $days = Date::days_in_month($month, $year); echo $days; // 结果为 // 30

 
当你需要遍历某个月份的天数时,这可能会很有用。
`mktime` 参数顺序,这样不想记住或者不知道如何记住它们的人来说,这是一个非常有用的函数。

$year = 2016; $month = 6; $days = date('j', mktime(0, 0, 0, $month + 1, 0, $year)); echo $days; // 结果为 // '30'

 
但是,在这种情况下,返回值严格来说是一个字符串,所以略有不同。

 

Str::increment()

这个函数很难找到合适的用途,但它的作用是递增字符串中与后缀对应的数字。这
类似于在 Excel 中输入“test1”和“test2”后,会自动生成“test3”和“test4”。

您可以指定用作分隔符的字符,如果指定为空字符串,则可以处理未分隔的字符串。
它甚至会自动为没有数字后缀的字符串添加后缀,但这项功能是否实用还有待商榷。

$test1 = 'test'; $test2 = 'test_1'; $test3 = 'test_3'; $test4 = 'test4'; $test5 = 'test_1_5'; $test6 = 'test_'; echo Str::increment($test1); ''); echo Str::increment($test5); echo Str::increment($test6); // 结果是 // 'test_1' // 'test_2' // 'test_4' // 'test5' // 'test_1_6' // 'test__1'

 
顺便一提,如果你查看内部源代码,你会看到一些典型的 PHP 代码,它只是将一个数字添加到字符串中。

 

Str::truncate()

前一个命令是递增,这个命令是截断,所以你可能会认为它是 SQL,但它不是。

如果给定的字符串长度超过指定的字符数,Str::truncate() 将在指定字符数后截断字符串,默认情况下将返回“...”。

我认为,即使你不知道框架内能容纳多少文字,但对于不需要换行或加宽的文本,仍然有相当大的需求。

在这种情况下,您可以使用此功能快速缩短它。

$test = "不怕雨,\n不怕风,\n不怕雪或夏日酷暑,\n我身体强壮,\n我没有欲望,\n我从不生气,\n我总是静静地微笑,\n我每天吃四碗糙米饭,\n味噌酱和一些蔬菜,\n我认真倾听,理解,并且永远不会忘记正在发生的事情,\n无需刻意去做。"; // 摘自青空文库 (http://www.aozora.gr.jp/cards/000081/files/45630_23908.html) echo Str::truncate($test, 10); // 结果是 // '不怕雨,// 不怕风...'

 
换行符似乎也被算作一个字符。FuelPHP
的 Str 类在设计时就考虑到了多字节字符,所以您可以比较放心地使用它。

尽管 FuelPHP 被认为是轻量级的,但它仍然具备这些实用的小功能。
等我积累了更多想法,会再和大家分享。

 
就这样。

如果您觉得这篇文章对您有帮助,请点个“赞”!
0
加载中...
0票,平均分:0.00/10
2,824
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

万代洋一

我的主要工作是开发社交游戏的Web API,但幸运的是,我也有机会参与其他各种任务,包括市场营销。
我在Beyond中的图像版权采用CC0协议。