我忍不住想用它! 我将介绍只有我知道的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 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


 在遍历一个月中的天数时,这可能会很有用。
最终,它与下面的方法相同,但不想记住的人来说,这是一个很有用的函数

$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,735
X Facebook 哈特纳书签 口袋

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。