PHP:为什么使用数组?

2023-12-20 23:10:15 浏览数 (1)

PHP 数组可能会让来自其他编程语言的开发者感到惊讶。

这个非常方便的结构可以存储各种类型的元素,但它并不完美。

简单介绍 PHP 数组

在核心层面上,数组是一个映射。它通常包含键和值,值可以是数组,让你能够构建树形和其他多维结构(如果有意义的话):

代码语言:php复制
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

$array2 = [
    "foofoo" => "barbar",
    "barbar" => $array,
];

键是可选的,如果你不指定键,PHP 会自动递增数字。

如果你阅读文档,学习和使用都相当容易。

PHP 数组的缺陷

PHP 中到处都是数组。我是说,真的随处可见。

它非常方便,因为你有大量内置的辅助工具和函数,可以进行各种排序、过滤和其他常见操作。

在我看来,这可能是使用这种结构的一个有效理由,特别是当你想要处理元素列表时。

然而,这并不是魔法。最大的问题是你几乎可以将任何东西放入数组中,有时这样做会使安全使用和测试变得更加困难。

在嵌套数组中,为了类型安全经常会写下好几行防御性代码,更不用说在典型的 PHP 脚本中会发现多个 isset() 或 empty() 了。

这本身并不是坏事,但有些开发者可能更喜欢具有定义结构的面向对象方法。

如果开始将关联数组传递给函数,会变得更糟糕,需要一遍又一遍地重复相同的测试。

代码语言:php复制
function myfunc(array $params) {
    if (!isset($params['id'], $params['name']) {
        return 'Atchoum';
    }
}

// 对比

代码语言:php复制
function myfunc(ParamObject $params) {}

如上例所示,在上述示例中,你只能使用内置的数组进行类型提示。

还有其他方法

PHP 还有其他你可能还不知道的结构:

生成器(generators):它们提供了几乎相同的功能(你可以在 foreach 循环中使用它们),但内存消耗更少,特别是如果不需要进行复杂操作(例如,不允许回滚操作)。

集合(collections):你会得到更强的类型,因为你的自定义集合只会处理特定的子类型,而不是更多(例如,Laravel 集合)。

总结

PHP 数组非常方便,但请注意,并不存在能够适用于所有情况的魔法解决方案。

我们看到了一些可以改进代码的替代方法,包括类型安全和可读性,同时保持了方便的语法。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

0 人点赞