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)>0)
?应该是if(count($certificate_attachments)>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