大家好,第一部分出版以来已经过去了将近一年。评论中的讨论非常热烈,我为自己得出了结论,几乎立即对lib进行了更改,但是没有时间写这本书。
最近,我通过两种方法扩展了功能,并希望与您分享此新闻。
当然,我会写有关处理错误的文章。
对于那些不知道并忘记了什么ArrayHandler的人
扰流板
让我们回答这个问题:“在PHP中使用数组进行类型安全是什么?”
类型安全为:
;
;
, , - . , :
$a = 0;
if (key_exists($key, $collection))
{
$a = (int) $collection[$key];
}
:
$a = (int) $collection[$key] ?? 0;
, " ".
除了这三个优点外,ArrayHandler还提供了不变性,也就是说,我们可以安全地将ArrayHandler传递给抽象层,并且不会有人意外更改原始数组中的元素。为了更改该值,您需要创建一个ArrayHandler的新实例-与跳过将新值写入数组元素相比,跳过代码审阅要困难得多。
我不会复制和粘贴使用它们的示例,您可以在第一部分中看到它们,也可以阅读文档。
Liba是通过Composer安装的:
composer require sbwerewolf/language-specific
有PHP 5.6 / 7.0 / 7.2的版本。
到现在为止,已经有很长的介绍了。
更新
几天前,我既悲伤又无聊,我想做点好事,例如使其变得如此,以便当您使用foreach()遍历元素时,不仅可以获取元素(ValueHandler),还可以获取该元素的索引。
我满怀热情地工作了,已经编写了很多代码,我在PHP文档中遇到了一条注释,该注释使所有新代码无用。
事实证明,您可以执行以下操作:
yield $key => $value;
并且foreach()将返回元素的索引。尤里卡!
现在,IArrayHandler :: pull()返回数组元素中的新IArrayHandler以及该元素的索引。我很高兴,现在看来ArrayHandler已经成为处理数组的理想库(正如我在本文开头所指出的那样)。
. - IArrayHandler::getting(), Iterator ArrayHandler foreach() .
IArrayHandler::pulling() ArrayHandler ( , ). "pulling" - IArrayHandler::pull(), ArrayHandler .
IArrayHandler::getting() IValueHandler , . "getting" - IArrayHandler::get(), IValueHandler .
IArrayHandler::pulling() , IArrayHandler::getting() .
:
$data = new ArrayHandler(
[
'first' => ['A' => 1],
'next' => ['B'=>2],
'last' => ['C'=>3],
4=>[5,6],
7,
8,
9
]);
echo 'arrays'.PHP_EOL;
foreach ($data->pulling() as $key => $value) {
echo "[$key] => class is ".get_class($value).' '.PHP_EOL;
}
echo 'values'.PHP_EOL;
foreach ($data->getting() as $key => $value) {
echo "[$key] => {$value->asIs()} , class is ".get_class($value).' '.PHP_EOL;
}
:
arrays
[first] => class is LanguageSpecific\ArrayHandler
[next] => class is LanguageSpecific\ArrayHandler
[last] => class is LanguageSpecific\ArrayHandler
[4] => class is LanguageSpecific\ArrayHandler
values
[5] => 7 , class is LanguageSpecific\ValueHandler
[6] => 8 , class is LanguageSpecific\ValueHandler
[7] => 9 , class is LanguageSpecific\ValueHandler
, foreach():
$data = new ArrayHandler(
[
'first' => ['A' => 1],
'next' => ['B'=>2],
'last' => ['C'=>3],
4=>[5,6],
7,
8,
9
]);
echo 'ALL'.PHP_EOL;
foreach ($data as $key => $value) {
$type = gettype($value->asIs());
echo "[$key] => value type is $type , class is ".get_class($value).PHP_EOL;
}
:
ALL
[first] => value type is array , class is LanguageSpecific\ValueHandler
[next] => value type is array , class is LanguageSpecific\ValueHandler
[last] => value type is array , class is LanguageSpecific\ValueHandler
[4] => value type is array , class is LanguageSpecific\ValueHandler
[5] => value type is integer , class is LanguageSpecific\ValueHandler
[6] => value type is integer , class is LanguageSpecific\ValueHandler
[7] => value type is integer , class is LanguageSpecific\ValueHandler
, , , foreach(), :
foreach ($data as $key => $value) {
/* @var \LanguageSpecific\ValueHandler $value */
if($value->type() === 'array'){
$handler = new ArrayHandler($value->array());
/* some code */
}
}
IValueHandler::default() , @GreedyIvan, , .
ArrayHandler::simplify() ,
ArrayHandler->simplify(), array_column? (c) @olegmar
C @olegmar.
IArrayHandler :: next()方法已被IArrayHandler :: pulling()取代,该方法遍历所有嵌套数组(第一个嵌套级别)。@Hett的评论并非直接说服了我,而是促使我思考。
感谢@ ReDev1L在评论中的支持。
IArrayHandler :: raw()方法已添加以获得原始数组。以前,当不可能获取元素的索引时,有必要遍历原始数组,现在,根据使用经验,有必要添加/减去数组元素并从修改后的数组创建一个新的ArrayHandler。
就这样。谢谢阅读。