【问题标题】:Fatal error: Uncaught Error: Cannot use object of type Entrada as array致命错误:未捕获错误:无法使用 Entrada 类型的对象作为数组
【发布时间】:2019-05-31 11:59:43
【问题描述】:

谁帮我解决这个问题?

56    public static function mostrar_entradas_busqueda($entradas) {
57            $count = count($entradas);
58            for ($i = 1; $i <= $count; $i++) {
59                if ($i % 3 == 1) {
60                    ?>
61                    <div class="row"> 
62                        <?php
63                    }
64                    $entradas = $entradas[$i - 1];
65                    self::mostrar_entrada_busqueda($entradas);
66                    
67                    if ($i % 3 == 0) {
68                        ?>
69                    </div>
70                        <?php
71                    }
72                }
73                if ($i % 3 !== 0) {
74                    ?>
75                    </div>
76                    <?php
77                }
78            }

致命错误:未捕获错误:无法将 Entrada 类型的对象用作 C:\xampp\htdocs\blog\app\EscritorEntradas.inc.php:64 中的数组 跟踪:#0 C:\xampp\htdocs\blog\vistas\buscar.php(81): EscritorEntradas::mostrar_entradas_busqueda(Object(Entrada)) #1 C:\xampp\htdocs\blog\index.php(117): include_once('C:\xampp\htdocs...') #2 {main} 抛出 C:\xampp\htdocs\blog\app\EscritorEntradas.inc.php 第 64 行

【问题讨论】:

  • 请在您的函数请求时添加 var_dump($entradas) 并共享输出 - 我担心它会反对而不是数组 - 如果是这样,请尝试在 while 循环之前将其转换为数组。并重命名内部变量
  • 这也是我的第一个想法。但检查编辑(在第二个答案中,由 OP 给出);似乎$entradas 是一个合适的数组,因为至少有一次循环体被调用(因此Notice: Undefined variable: entrada msg)。它正在重写将事情完全搞砸的价值。

标签: php arrays


【解决方案1】:

第一次执行时,这一行...

$entradas = $entradas[$i - 1];

... 将$entradas 的值重写为一个对象($entradas 数组的第零个元素的值)。下次尝试执行它时,实际上是将该对象作为数组进行查询,因此会出现错误。

解决方案:只需重命名该变量,即可完成:

$entrada = $entradas[$i - 1]; // and now it's single
self::mostrar_entrada_busqueda($entrada);

是的,在 PHP 中,变量的作用域是每个函数,而不是每个块。但即使是后者,你仍然必须重写那行;我不知道有任何语言对赋值语句的左右部分有不同的范围解析规则。

作为旁注,我真的不知道你为什么要在 if (i % 3 == 1) 分支中检查 i % 3 == 0

【讨论】:

  • 继续给我错误,我会告诉你其他功能和错误
  • 检查了其他功能;它没有做你认为它做的事情。 echoprint 和 PHP 中的类似内容之间存在细微差别,只是使用 &lt;?php ... ?&gt; 退出“解释器模式”。您必须以某种方式包装该函数的输出 - 使用 HEREDOC 表示法、输出缓冲或其他方式。
  • Muchas gracias raina77ow, no sabes cuanto te agradezco, bastante amable。
猜你喜欢
  • 2017-11-12
  • 2017-12-08
  • 2019-07-04
  • 2019-03-04
  • 2016-12-17
  • 2017-06-05
  • 2019-02-26
  • 2021-07-09
  • 2014-06-02
相关资源
最近更新 更多