Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在不使用`foreach'的情况下遍历对象的子对象`_Php_Oop_Web_Iterator - Fatal编程技术网

Php 在不使用`foreach'的情况下遍历对象的子对象`

Php 在不使用`foreach'的情况下遍历对象的子对象`,php,oop,web,iterator,Php,Oop,Web,Iterator,可能重复: …b原因如果父对象为空,foreach将显示错误for()将是我首选的循环逻辑,但我不知道如何访问子对象属性 工作代码: foreach ($main_object as $object) { $object->value = $object->value * 3.14; } 但是当$main\u对象为空或null时,foreach转储错误 我在寻找更像这样的东西: (伪)代码: for($p=0;$p$p->value=$main\u object->$p-

可能重复:

…b原因如果父对象为空,foreach将显示错误
for()
将是我首选的循环逻辑,但我不知道如何访问子对象属性

工作代码:

foreach ($main_object as $object) {
    $object->value = $object->value * 3.14;
}
但是
$main\u对象
为空或null时,
foreach
转储错误

我在寻找更像这样的东西:

(伪)代码:

for($p=0;$p$p->value=$main\u object->$p->value*3.14;
}
现在,如果“$main_object”为空/null,则不会抛出任何错误,逻辑将保持为“truckin”


当对象是父对象中的一组子对象之一时,如何访问子对象
$x->properties

您可以使用
get\u class\u vars
返回数组中类的所有属性。然后使用for循环进行迭代。您可以使用数组键和对象访问它们:

$aryAttr = get_class_vars($main_object);
for ($p = 0; $p < count($aryAttr); $p++) {
    $key=key($aryAttr);
    $main_object->$key>value = $main_object->$key->value *3.14;
    next($aryAttr);
}
$aryAttr=get\u class\u vars($main\u object);
对于($p=0;$p$key>value=$main\u object->$key->value*3.14;
其次($aryAttr);
}

这可能会有所帮助,但没有对其进行测试。

只需在迭代之前先检查对象是否包含至少一项:

if($a && count($a)){
    // iterate using foreach
}
我也觉得这很烦人,但是
foreach
非常容易处理,所以这有点折衷。我仍然宁愿做上面的事情,也不愿使用类似于
的东西来处理
(这也可以)


干杯

在执行foreach循环之前,为什么不检查main_对象是否为空

if($main_object->child != null)
{
  foreach ($main_object->child as $object)
 {
    $object->value = $object->value * 3.14;
 }
}

如果
$main_object
没有可迭代的公共可见成员,仍然会导致错误。我的错,你是对的,应该有一个属性(即集合)来保存子对象@devOp你不需要查看类来回答这个问题,我确信op希望它应用于任何对象。Erg。。。我想避免的。通常我会这样做:如果(!empty($main_object)){foreach($object作为$object的main_object){…},正如您所指出的,它工作得很好。真的会认为foreach会说“哦,看,A‘我什么都没做’,而不是抛出一个错误。”。当你明白这个答案有多烦人时,你就得到了信任(并且一直保持着OOP)。
if($main_object->child != null)
{
  foreach ($main_object->child as $object)
 {
    $object->value = $object->value * 3.14;
 }
}