PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]

Posted

技术标签:

【中文标题】PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]【英文标题】:PHP warning Message: count(): Parameter must be an array or an object that implements Countable [duplicate] 【发布时间】:2020-01-26 15:02:08 【问题描述】:

如果我单击链接以查看证书列表,则会出现错误。它在某些系统中运行良好我已经测试了大约 3-4 个系统,使用相同的代码它运行良好,但在一个系统中却不是工作。

这是我在计数时遇到问题的代码

<?php

    if (count(@$certificate_attachments)>0) 
        foreach ($certificate_attachments as $cert_key => $cert_val) 
            if ((strpos($cert_val, ".png")) || (strpos($cert_val, ".jpg")) || (strpos($cert_val, ".jpeg"))) 
                ?>
        <div class="col-md-3">
            <a href="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>" title="Certificates" class="thickbox ">
                <img   class="certif" src="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>" />
            </a>
        </div>
    <?php
             else 
                ?>
        <div class="col-md-3">
            <a href="#TB_inline?height=800&width=500&inlineId=pdfContent<?php echo $cert_key; ?>" title="" class="thickbox">
                <img   src="<?php echo $this->config->item('img_path_portal_doctor'); ?>pdf-icon.png" class="">
            </a>
        </div>
        <div id="pdfContent<?php echo $cert_key; ?>" style="display: none;">
            <p>
                <object type="application/pdf"   frame-resize data="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>">
                <embed src="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>" type="application/pdf" />
                </object>

            </p>
        </div>
    <?php
            
        
     else 
        ?>
        Not provided any Certificates.
    <?php
    
    ?>
</div>

收到此错误:

遇到了 PHP 错误

严重性:警告

消息:count():参数必须是数组或者实现了Countable的对象

文件名:医生/profile.php

行号:533

但它运行良好的系统我正在使用相同的代码在另一个 2-3 个系统中工作和测试它也运行良好,但是当客户端运行此代码时,它在客户端系统中遇到了这个问题。

【问题讨论】:

javascript 在这里是否相关? 为什么@ 中有if(count(@$certificate_attachments)&gt;0) ?应该是if(count($certificate_attachments)&gt;0) @AlaaMorad 如果我在变量之前删除此 @ 符号,则会收到错误,因为未定义变量 $certificate_attachments @Latha @ 隐藏错误,应该很少使用。在这种情况下,找出您的变量未定义的原因。 但是它在某些系统中工作并且它不是只在一个系统中工作 【参考方案1】:

正如其他人所说,请不要使用@,它实际上是一个错误抑制运算符,它会隐藏像这样的错误。由于从原始代码中删除 @ 会导致“未定义变量”变量警告。我建议您回到定义变量 $certificate_attachments 的位置并检查它是如何定义的。它可能被定义为超出范围,可能是一个条件语句,可以解释为什么它适用于某些系统而不适用于其他系统。这是一个超出范围的简单示例;

// pseudo code to demonstrate out of scope

$results = data_queried_from_database_or_something();

if(!empty($results)) 
    // define attachments only if we get results
    $certificate_attachments = $results;

// For systems that have no attachments, calling $certificate_attachments
// will result in "undefined variable" error message

最好在 count()

之前进行类型检查,而不是使用 @ 符号来抑制错误
// ensure that the variable is an array and that it has values in it.
if(is_array($certificate_attachments) && count($certificate_attachments) > 0) 

    // your code goes here

查看定义 $certificate_attachments 的代码并了解代码成功运行和未成功运行的不同情况会很有帮助。

【讨论】:

以上是关于PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP错误:警告:count():参数必须是实现Countable的数组或对象

./libraries/plugin_interface.lib.php#551 count() 中的警告:参数必须是数组或实现 Countable 的对象

MYBB 警告 [2] count():参数必须是数组或实现 Countable 的对象 - 行:906

PHP 7.4 - 警告:count():参数必须是数组

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

警告:count():参数必须是一个实现Countable的数组或对象(在数组中是多维的)