警告:sizeof():参数必须是实现可计数php7.2的数组或对象

警告:sizeof():参数必须是实现可计数php7.2的数组或对象,php,sizeof,php-7.2,Php,Sizeof,Php 7.2,我更新到PHP7.2,它创建了一个问题数组(没有双关语)。我已经消除了这些警告(主要是sizeof和count()警告。我们有一个错误: 警告:sizeof():参数必须是在第236行的/usr/www/domain/phpmyd/includes/class_registry.php中实现可数的数组或对象 我试着这样修理: if(sizeof($this->config)config)和&(sizeof($this->config)language)&(0language)){ 删除了基本相同

我更新到PHP7.2,它创建了一个问题数组(没有双关语)。我已经消除了这些警告(主要是sizeof和count()警告。我们有一个错误:

警告:sizeof():参数必须是在第236行的/usr/www/domain/phpmyd/includes/class_registry.php中实现可数的数组或对象

我试着这样修理:
if(sizeof($this->config)<1){

对此:
if(!empty($this->config)和&(sizeof($this->config)<1)){

但是它会产生更多的错误,如下所示,然而,我们用同样的方法修复了这个错误,它工作得非常完美。更改此项:
if(0language)){

对此:
if(!empty($this->language)&(0language)){

删除了基本相同的错误。现在,请记住,上面的警告是唯一剩下的错误。其他所有操作都很完美,但是,如果我“修复”了警告,我会收到一系列错误,这些错误会破坏网站,并且看起来不相关。因此,如果我替换第一个字符串,所有这些错误都会出现:

  • 警告:使用未定义的常量附加\折扣\代码-假定 “附加折扣代码”(这将在未来版本中引发错误 第6行的/usr/www/domainlistings/phpmyd/index.PHP中
  • 警告:使用未定义的常量ADDON_BLOG-假定为“ADDON_BLOG” (这将在PHP的未来版本中抛出一个错误) /usr/www/domainlistings/phpmyd/cp/template/default/admin_header.tpl 在线134
  • 警告:使用未定义的常量加载项链接检查器-假定 “ADDON\u LINK\u CHECKER”(这将在未来版本的 PHP)在 /usr/www/domainlistings/phpmyd/cp/template/default/admin_header.tpl 在线179
这些错误并没有出现,在我改变之前,这些事情一直运作良好
if(sizeof($this->config)<1){

这是如何联系起来的?我不确定这里发生了什么,这一行是如何影响或破坏其他(看似无关)事物的。初始问题的完整代码(第236行):

/**
*获取配置值
*@param string$key
*@返回混合
*/
公共函数getConfig($key){
if(sizeof($this->config)<1){
$this->loadConfig();
}
返回isset($this->config[$key])?$this->config[$key]:false;
}

有什么想法吗?

对于初学者来说,不要使用
sizeof
,而是
count
;)廉价的改进-总是少一个操作码

其次,确保传递的数组不为null或任何值,例如:

// dirty fix
if (count((array) $this->config) > 0) {
    …
}
若要正确修复此问题,无论如何都不应允许此属性为
null
。如果在延迟加载后检查变量是否为null或不是数组,例如:

public function getConfig($key, $default = false)
{
    if (!is_array($this->config)) {
        // make sure it becomes one after the load
        $this->loadConfig();
    }

    return $this->config[$key]) ?? $default;
}

首先,不要使用
sizeof
,而是
count
;)廉价的改进—总是少一个操作码

其次,确保传递的数组不为null或任何值,例如:

// dirty fix
if (count((array) $this->config) > 0) {
    …
}
若要正确修复此问题,无论如何都不应允许此属性为
null
。如果在延迟加载后检查变量是否为null或不是数组,例如:

public function getConfig($key, $default = false)
{
    if (!is_array($this->config)) {
        // make sure it becomes one after the load
        $this->loadConfig();
    }

    return $this->config[$key]) ?? $default;
}

我认为这里发生的事情是,您最初所做的更改确保了
loadConfig()
永远不会发生,而
loadConfig()
中的某些内容负责定义更改后您收到警告的所有常量

如果你改变了

if (sizeof($this->config) < 1) {

我认为这里发生的事情是,您最初所做的更改确保了
loadConfig()
永远不会发生,而
loadConfig()
中的某些内容负责定义更改后您收到警告的所有常量

如果你改变了

if (sizeof($this->config) < 1) {

在传递变量之前,您可以检查它是否为数组:

if(is_array($this->config)){
   if(sizeof($this.config) < 1) {
       // code here
   }
}
if(是数组($this->config)){
if(sizeof($this.config)<1){
//代码在这里
}
}

在传递变量之前,您只需检查它是否为数组:

if(is_array($this->config)){
   if(sizeof($this.config) < 1) {
       // code here
   }
}
if(是数组($this->config)){
if(sizeof($this.config)<1){
//代码在这里
}
}

只是好奇:为什么这里需要sizeof/count?简单的
if(!$this->config)有什么问题
?OP问这为什么不起作用。这是7.2更新中的一个常见问题,尤其是对于contrib模块/软件包。从7.2.0开始,count会发出警告,如果传递空值,它通常会无声地失败。例如@JDev518这是正确的,我已经修复了12个,但这一个似乎产生了最严重的后果ly未链接,我不知道原因(或链接)。Emix给了我一些思考的东西!只是好奇:为什么这里需要sizeof/count?简单的
if(!$this->config)有什么问题
?OP问这为什么不起作用。这是7.2更新中的一个常见问题,尤其是对于contrib模块/软件包。从7.2.0开始,count会发出警告,如果传递空值,它通常会无声地失败。例如@JDev518这是正确的,我已经修复了12个,但这一个似乎产生了最严重的后果我没有联系,我不知道原因(或联系).Emix给了我一些思考的东西!所以,你对第二部分没有错。这似乎是一种更有效的方法,尽管如果我实现这样的解决方案,它会抛出相同的配置错误,不幸的是,我们不知道为什么,我必须认真考虑一下。第一个修复确实会停止警告,但不会破坏配置。我真的很震惊它的工作原理,但我们没有考虑它。你的两个答案都是有效的,我很感激!ISo,你对第二部分没有错。这似乎是一个更有效的方法,尽管如果我实现这样的解决方案,它会抛出相同的配置错误,不幸的是,我们没有解释为什么,我必须认真思考关于这个,冷杉