【问题标题】:replacement of array define in php 5.6替换 php 5.6 中的数组定义
【发布时间】:2019-03-15 10:10:05
【问题描述】:

在我的本地主机上PHP7 正在运行,我正在使用define() 函数来定义一个数组。它工作正常。

define('JOBS_CREATORS', ['aaa@admin.com', 'bbbb@admin.com']);

据我们所知,它适用于PHP7 版本。我用谷歌搜索并找到了const 关键字,它适用于PHP5.6 或更低版本。

据我所知,const 仅适用于 class

但我使用的是 WordPress,所以我需要在 functions.php 文件中定义。

有没有其他方法可以在不使用class的情况下定义数组?

【问题讨论】:

  • 如果您的托管服务提供商仍在 PHP 5.6 上,您需要考虑寻找一个新的。甚至 PHP 7.0 也已经足够老了,以至于它现在已经失去支持并被认为是报废了。
  • 其实还有其他 PHP 站点正在运行,它们需要 PHP 低版本。这就是我无法升级PHP版本的原因。
  • 修复其他网站,使其不依赖于未获得安全修复的不受支持的 PHP 版本!
  • 这也是像 Docker 这样的平台如此优秀的原因。使用 Docker,您可以在自己的隔离容器中运行每个系统,因此它们都可以运行所需的 PHP(或其他)版本,而不会相互干扰。

标签: php wordpress constants


【解决方案1】:

您可以更新常量以接受序列化数组。

define('JOBS_CREATORS', serialize(['aaa@admin.com', 'bbbb@admin.com']));

然后

if(in_array("aaa@admin.com", unserialize(JOBS_CREATORS))){ ...

【讨论】:

  • 如果您要这样做,请使用json_encode 而不是serialize
  • @Spudley,序列化工作正常。 json_encode而不是序列化有什么不同吗?
  • Serialize 超重且过于复杂(有时容易出现安全漏洞)。唯一正确的用例是,如果您使用睡眠/唤醒功能在运行之间持久化对象。
  • 感谢@Spudley 的帮助 :)
  • @GufranHasan 重点是序列化数据,不管你怎么做。 json_encode 也是一种序列化的形式。顺便说一句,wordpress 仍然使用serialize 将数据保存到数据库中。
【解决方案2】:

在 PHP 5.6 中使用 const 关键字仍然可以做到这一点(参见这篇文章):

PHP Constants Containing Arrays?

const JOBS_CREATORS = ['aaa@admin.com', 'bbbb@admin.com'];

【讨论】:

  • 感谢您的回答。我已经尝试过了,但不幸的是,它不起作用。它给出了错误 const value cannot update.
  • 你能告诉我你的代码吗?当然你不能更新一个常数......这就是为什么它被称为常数。如果你需要更新它,你必须使用变量而不是常量
【解决方案3】:

正如 @Spudley 建议使用 json_encode 而不是 serialize。我用json_encodejson_decode作为:

定义:

define('JOBS_CREATORS', json_encode(['aaa@admin.com', 'bbbb@admin.com']));

获取:

echo '<pre>';print_r(json_decode(JOBS_CREATORS)); echo '</pre>';

但是@TahaPaksu的回答也很有用。

谢谢,@Spudley@TahaPaksu :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2016-07-08
    • 2012-01-26
    • 2012-03-13
    • 2013-11-16
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多