0

我有一个 PHP Entity 类,其中每个实体可能包含多个子实体,并且__get()用于从父实体中退出以查找其子实体。

$parent->Child1->Child2->Child3->value;

public function __get($name) {
    $name = preg_replace('/![A-z ]+/', '', $name);
        // $child = getByName($name, $parentid)
    if ($child = $this->getByName(str_replace('_', ' ', $name), $this->id)) {
    return $child;
    } else {
        return false;
    }
}

但是,如果任何子实体不存在,它会失败并显示“尝试获取非对象的属性......”除了执行以下操作之外,是否有更好的方法来防止这种情况?

if(isset($parent) && is_object($parent->Child1) && is_object($parent->Child1->Child2)
4

1 回答 1

1

我可以想到两种解决方法:


嵌套if的:

    if($child = $parent->Child) {
      如果($child2 = $child->Child2){
        如果($child3 = $child2->Child3){
          // 使用 $child3->Value
        }
      }
    }

辅助函数(当然,这种方法失去了 IntelliSense):

    函数 getDescendant($parent) {
      $args = func_get_args();
      $names = array_slice($args, 1);
      $结果= $父;
      而(计数($名称)){
        $name = array_shift($names);
        if(isset($result->$name)) {
          $result = $result->$name;
        } 别的 {
          返回空值;
        }
      }
      返回$结果;
    }

    if($c3 = getDescendant($parent, 'Child1', 'Child2', 'Child3')) {
      // 使用 $c3->value;
    }
于 2013-05-23T16:21:32.023 回答