【问题标题】:php fatal exception handling with arrayObject使用 arrayObject 处理 php 致命异常
【发布时间】:2011-02-17 16:40:02
【问题描述】:

在 arrayObject 的异常处理方面需要帮助。我正在遍历一系列对象,但是当偏移量结束时发生致命异常。代码是:

while ($c <= 10) {
    $num = 1;
    $b = $c-$num;
    $object_to_iterate = $q[$b];
    $obj = new ArrayObject ($object_to_iterate);
    iterateObject($obj);
    $c ++;
}

错误是:

Fatal error: Uncaught exception 'InvalidArgumentException'

任何帮助都会很棒。

【问题讨论】:

  • 如果没有任何关于$b$c$q$num 的上下文或解释,真的很难弄清楚...
  • 我确定致命异常与“新 ArrayObject”有关。我想我需要在 $b 偏移量为空时捕获 ArrayObject?

标签: php object exception-handling


【解决方案1】:

来自manual

The input parameter accepts an array or an Object.

现在正如@BoltClock 所说:在不知道b、c、q 和num 是什么的情况下真的很难弄清楚,但是如果q 是一个数组,那么

$object_to_iterate = $q[$b];

可能只是一个字符串?然后

$obj = new ArrayObject ($object_to_iterate);

有一个不是对象或数组的参数? 也许在那个$object_to_iterate 上做一个var_dump(),然后检查它是一个数组还是一个对象。

【讨论】:

  • 我认为可能是 $q 对象正在尝试查找 $b 偏移量,它是一个数字并且该数字不存在,因此 ArrayObject 尝试使用 $q[$b]它为空并引发异常。这有意义吗?
  • 它可能是,但即使偏移量 $b 存在,它也可能是 $q[$b] 不是一个对象,如果没有实际被告知什么是我们无法知道的在 $q 内。所以最后,目标是检查 object_to_iterate 是否真的是一个对象(或数组)。
【解决方案2】:

$c 以什么开头?如果为 0(很可能),则 $b = -1 并且您正在尝试获取 $q[-1],这同样可能不存在。所以你并没有真正将任何东西传递给 ArrayObject 构造函数。

【讨论】:

  • 我认为这是正确的,但我无法编写代码来阻止此类异常的发生,因为我不知道存在多少对象,即它可能是从 1 到 10 的任何对象?
  • 在测试 $object_to_iterate 是否为对象之前使用 is_object()
【解决方案3】:

好的,我不知道这是否是最好的方法,但我使用了以下代码:

while ($c <= 10) {
$num = 1;
$b = $c-$num;
$object_to_iterate = $q[$b];
//exception handling
if (empty($q[$b])) {
break;
} else {
$obj = new ArrayObject($object_to_iterate);
iterateObject($obj); 
}
$c ++;
}

它通过

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多