我将介绍一些我只用过但非常实用的 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
