【问题标题】:PHP warning Message: count(): Parameter must be an array or an object that implements Countable [duplicate]PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]
【发布时间】: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 height="100" width="100" 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 height="100" width="100" 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" width="600" height="500" 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 @ 隐藏错误,应该很少使用。在这种情况下,找出您的变量未定义的原因。
  • 但是它在某些系统中工作并且它不是只在一个系统中工作

标签: php codeigniter


【解决方案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 的代码并了解代码成功运行和未成功运行的不同情况会很有帮助。

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 2018-12-19
    • 1970-01-01
    • 2018-09-10
    • 2020-01-18
    • 2019-06-20
    • 2021-05-30
    • 2019-10-18
    • 2019-01-06
    相关资源
    最近更新 更多