【问题标题】:Countable issue for PHP 7.2PHP 7.2 的可数问题
【发布时间】:2019-08-04 09:16:46
【问题描述】:

我有一个客户多年来一直依赖 WP 插件,但几年前被作者放弃了。我已经能够进行一些修复以使其与 PHP 7.2 的升级一起工作,但这让我感到困惑。我研究得越多,我就越不了解如何解决它。

以下警告:

警告:count():参数必须是在第 311 行的 /app/public/wp-content/plugins/ozh-admin-drop-down-menu/inc/core.php 中实现 Countable 的数组或对象(下面第一行是 311

if (!count($wp_ozh_adminmenu)) {
    $wp_ozh_adminmenu = (array)get_option('ozh_adminmenu');
    unset($wp_ozh_adminmenu[0]);
}

【问题讨论】:

  • $wp_ozh_adminmenu 是一个数组吗?你能确定吗?
  • $wp_ozh_adminmenu 的值是多少?我猜它是一个字符串。像这样的测试呢...if (!is_array($wp_ozh_adminmenu) || count($wp_ozh_adminmenu) === 0)
  • 不确定我是否在关注,但只是将上面的代码包装在: if (!is_array($w​​p_ozh_adminmenu) || count($wp_ozh_adminmenu) === 0) { } 这没有帮助。

标签: php count


【解决方案1】:

在 PHP 7.2 之前,当将非数组传递给 count() 时,它返回 1。
现在,正如您在 breaking changes 中看到的那样,count() 在您给它一个非数组时会发出警告。

一个简单的解决方法是在使用它之前检查它是否是一个数组。例如,如果您想允许数组和字符串,则可能需要进行更多检查。

<?php
if (!is_array($wp_ozh_adminmenu) || !count($wp_ozh_adminmenu)) {
    $wp_ozh_adminmenu = (array)get_option('ozh_adminmenu');
    unset($wp_ozh_adminmenu[0]);
}

【讨论】:

  • 修复了它。可能需要我进行更多研究以了解如何/为什么。非常感谢!
  • @Ray 研究应该主要是关于插件,它给你的函数提供了什么样的变量。它可能使用多种类型(例如数组或字符串),弱 PHP 类型允许它这样做。随着 PHP 7.2 的重大变化,您需要稍作调整。如果您只使用is_array() 并且不再允许任何其他类型,则将来当插件尝试使用字符串时,您可能会遇到一些问题。
猜你喜欢
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
相关资源
最近更新 更多