好久没写 PHP,关于 implode 函数。

@Ta 2023-02-27发布,2023-02-27修改 416点击

好久没写 PHP了,最近突然看到一个函数 implode ,也就是类似 js 中的 String.prototye.join。

发现他的函数参数和我记忆中的有点不一样了,于是去看了官方手册:

image.png(194.98 KB)

可以发现:

implode(array $array, string $separator): string

已经成为了遗留写法。而新版的取而代之的是两个签名的函数。

我个人观点认为,遗留写法的 API 设计的很好啊,第一个肯定是数组,第二个分隔符(separator)可以作为可选值,默认为空字符串。这样一个 API,可以实现两个效果呢。同时也不需要特意去记忆参数位置。

这就是小编为大家整理的关于 implode 函数的内容,大家是怎么看待的呢?欢迎评论区留言和点赞。

@ChatGPT

回复列表(12|隐藏机器人聊天)
  • @Ta / 2023-02-27 / /

    [新会话] @水木易安,implode函数在PHP中是一个常用的字符串函数,用于将数组中的元素拼接成一个字符串,并返回该字符串。根据官方文档的说明,implode函数在PHP 7.4.0版本中被标记为遗留写法,意味着虽然可以继续使用,但是不推荐使用。

    在PHP 8.0.0版本中,implode函数的参数顺序已经被调整为与其他字符串函数一致,并且新增了一个函数别名join,它具有相同的参数顺序和功能。这种变化是为了使字符串函数的参数顺序更加统一和易于记忆,同时也便于更好的代码阅读和维护。

    从设计角度来看,旧版的implode函数确实具有一定的优点,如你所说,它可以实现两个效果,并且不需要特别记忆参数的位置。但是,新版的implode函数的变化主要是为了与其他字符串函数的参数顺序保持一致,并且使用更加直观和简单的函数名。此外,PHP还为join函数添加了别名,以便于用户可以使用更习惯的函数名。

    因此,我认为PHP 8.0.0版本中implode函数的调整是一个很好的决定,虽然在一些特定情况下旧版的写法可能更加方便和实用,但是整体来说,新版的写法更加易于理解和使用。

  • @Ta / 2023-02-27 / /

    @水木易安,从我为hu60.cn编写第一行代码起,explodeimplode的参数顺序一直都是(分隔符, 数组),你怎么会有相反的印象呢?

    图片.png(45.15 KB)

  • @Ta / 2023-02-27 / /

    @ChatGPT,PHP implode 函数的参数顺序变更是什么时候实施的?

  • @Ta / 2023-02-27 / /
    被锁定
    管理员 @老虎会游泳 于 2023-02-27 11:17 删除了该楼层,理由如下:

    回答完全错误

  • @Ta / 2023-02-27 / /

    @ChatGPT,PHP implode 函数的 $separator, $array 签名是什么时候添加的?

  • @Ta / 2023-02-27 / /

    @老虎会游泳,在 PHP 中,implode() 函数最早出现在 PHP 4.0.5 版本中,其原始签名为:

    string implode ( string $glue , array $pieces )
    

    其中,$glue 是分隔符,$pieces 是要连接的数组。

    这个函数签名一直沿用到 PHP 5.0 版本,之后在 PHP 5.1.0 版本中进行了修改,修改后的签名为:

    string implode ( array $pieces [, string $glue = "" ] )
    

    其中,$pieces 仍然是要连接的数组,而 $glue 变成了一个可选参数,如果未指定分隔符,则默认为空字符串。

    这个函数签名在 PHP 7.0 版本之前一直沿用,之后在 PHP 7.0 版本中进行了最后一次修改,将参数顺序倒置,变成了:

    string implode ( string $glue , array $pieces )
    

    这个变更是为了与其他类似函数的参数顺序保持一致,如 explode()str_replace() 等。

  • @Ta / 2023-02-27 / /

    @水木易安,原来这个参数顺序真的被改来改去过 ┓( ´∀` )┏

  • @Ta / 2023-02-27 / /

    @老虎会游泳,完了,你别问它了,它自己已经晕了。

    我理解的是,一开始就是 ‘分隔符’、‘数组’这样的签名。

    php7.0 - php7.4 出现过一段时间离谱的签名。

    7.4 以后,又恢复了。

  • @Ta / 2023-02-27 / /
    @老虎会游泳@水木易安,不管官网怎么变更,在开发过程中,难道你们没有使用程序开发软件中提供的提示服务吗?(比如PhpStorm中提供的智能识别参数类型并提示给开发者)
  • @Ta / 2023-02-27 / /

    虽然我很久没使用PhpStorm了,但它作为JetBrains成员之一,应该也具备这样的功能。

  • @Ta / 2023-02-27 / /

    @老虎会游泳,的确,2003 年就已经支持任意顺序了。
    explode 中,分隔符的确变的很重要,但是不传也可以默认为 '空字符串'。
    image.png(32.62 KB)

    所以我觉得这个第一个参数是操作主体更为合适。连接(implode)的主体是 array,打散(explode)的主体的 string,标识符(separator)默认是空字符串。

    @TabKey9,的确会有提示。不过我很久没写 php 了,没有打开 IDE,JS 写多了有点记混淆了。

添加新回复
回复需要登录