alwaysblank / brief
呈现您的论点。
Requires
- php: ^7.2|^8
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-07 02:40:14 UTC
README
呈现您的论点。
这是什么?
这是一个简单工具,用于传递变量结构数据集合。
我创建它的90%原因是因为我非常厌倦在程序流程中,键不存在等同于false值时编写isset()
等条件语句。它从那里开始提供一些与移动结构数据集合相关的其他功能。我发现它在与Laravel Blade模板化时特别有用。
(Brief只是解决这里可能使用的一些问题的方法之一:它不是旨在成为权威的或“最佳”解决方案,而只是一个方便的解决方案,如果您觉得它方便的话。)
它是如何工作的?
$Brief = Brief::make([ 'key' => 'value', ]); $Brief->key; // 'value' $Brief->doesnt_exist; // null
而不是抛出错误或异常,如果键没有关联的值,Brief将返回null
。
参数
新的Brief,无论是通过new Brief()
还是Brief::make()
创建,都接受两个参数
$items
-
要存储的值,通常是一个数组。
$settings
-
一些设置,如调用者、别名等。
两个参数都是可选的,尽管如果您希望创建一个空的Brief,建议使用new EmptyBrief()
或Brief::empty()
来使您的代码更清晰。
无论您使用哪种实例化方法,这两个参数的处理方式都是相同的,只有一个主要区别。虽然$items
可以通过两种方法接受现有的Brief,但其行为会有所不同
Brief::make($Brief)
-
这将返回您传递给它的完全相同的Brief。
new Brief($Brief)
-
这将尝试获取传递的Brief上存储的所有数据和设置,并将它们应用到新的Brief实例上。
在许多情况下,这种区别将是学术性的——您仍然可以使用任一方法获取您的数据——但您应该记住这种区别,尤其是如果您觉得您可能会在Brief上进行严格比较。我的建议是简单地选择一个实例化方法,并在整个项目中使用该方法,以最大限度地减少可能的混淆。
功能
存储数据
这是Brief的主要功能。
Brief期望数据以数组形式存在,但该数组是有键还是数字取决于您。(或者,使用数组不那么令人困惑的语言。)
$keyed = Brief::make([ 'key' => 'value1', 'key2' => 'value2', ]); $numeric = Brief::make([ 'number1', 'number2', ]);
别名
您可能会遇到想要有多个键指向相同数据的情况。通过别名,您可以轻松地实现这一点
$brief = Brief::make([ 'a_rose' => 'sweet smell', ], [ 'aliases' => [ 'a_rose' => 'any_other_name', ] ]); $brief->a_rose; // "sweet smell" $brief->any_other_name; // "sweet smell"
别名通过“设置”数组(新Brief的可选第二个参数)传递。使用键aliases
或alias
设置任何您想要的别名。
您可以通过传递字符串数组而不是单个字符串一次定义一个键的多个别名
$brief = Brief::make([ 'original_key' => 'value', ], [ 'aliases' => [ // "Array" style 'original_key' => ['another_key', 'another_another_key'], // "String" style 'original_key' => 'yet_another_key', ] ]); $brief->original_key === $brief->another_key === $brief->another_another_key === $brief->yet_another_key; // true
别名也可以相互链接,如果您觉得这样做的话。Brief将做出相对天真的尝试,避免陷入无限别名循环,并在检测到循环时停止尝试解析别名链。
$brief = Brief::make([ 'a_rose' => 'sweet smell', ], [ 'aliases' => [ 'a_rose' => ['any_other_name'], 'any_other_name' => ['montague'], ] ]); $brief->a_rose === $brief->montague; // true
自定义空测试
“Brief”类包含isEmpty()
和isNotEmpty()
方法,它们以某种天真方式测试“Brief”是否为空(它们仅检查数组中的顶级项目是否不等于null
)。如果您的用例需要更稳健的测试,您可以在实例化时将测试传递给isEmpty
参数。它接受PHP认为可调用的任何内容。
$brief = Brief::make([ ['key' => 'value'], ['isEmpty' => function($brief) { // some logic }] ); $brief->isEmpty(); // false (hopefully)
日志记录
由于“Brief”的基本概念是关于您的数据是否存在,所以如果“Brief”对您所做的事情不满意,它不会大声抱怨。如果可以恢复,它将简单地恢复并继续,但您的数据可能已丢失。在大多数情况下,这应该是可以的;如果“Brief”给您返回null
,而您认为您已经添加了这块数据,那么您的逻辑将会有所涉及。
然而,在某些情况下,您可能不希望这样——您希望知道发生了什么。幸运的是,“Brief”包括一个非常简单的日志记录功能。要使用它,只需做以下操作
$brief = Brief::make( ['key' => 'value'], ['logger' => function($name, $description, $clone, $data) { // Do something with this data }] );
在这个例子中,每次“Brief”遇到它理解的一些错误时,错误消息将被传递到您在这里定义的可调用函数。如果您将布尔值true
传递给logger
设置而不是可调用函数,那么它将只向PHP的error_log()
发送一个预定义的消息,然后您的系统将根据配置处理。
如果出于某种原因,您需要手动将某些内容记录到“Brief”,您可以这样做
$brief = Brief::make( ['key' => 'value'], ['logger' => function($name, $description, $clone, $data) { // Do something with this data }] ); $brief->log('ExampleError', 'This is to prove a point', ['a_key' => 'some_value']);
它将被发送到您定义的任何日志记录器(或者如果您没有定义,则不会发生任何事情)。这正是“Brief”用于内部记录错误所使用的机制。