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;
}
}