遍历父::子关系的php oop

遍历父::子关系的php oop,php,oop,scope,Php,Oop,Scope,我的实际代码很复杂,因此这里有一个简单但相关的说明: class base { var $child1; var $child2; function xcv() { $this->child1 = new objChild1(); $this->child2 = new objChild2(); } } class objChild1 { var $fruit = "apple"; } class objChild2 { functio

我的实际代码很复杂,因此这里有一个简单但相关的说明:

class base {

  var $child1;
  var $child2;

  function xcv() {
    $this->child1 = new objChild1();
    $this->child2 = new objChild2();
  }
}

class objChild1 {
  var $fruit = "apple";
}

class objChild2 {
  function getChild1Fruit() {
    echo parent::child1->fruit;
  }
}
相当直截了当,但是如果objGrandchild1想给child2打电话呢。。。它是否像parent::parent::child1->fruit

在此领域的任何提示都将不胜感激

======编辑=====
抱歉,我刚刚意识到父级属于扩展的使用,因此可能与之无关您在所做的编辑中做对了。一个对象没有在中使用的对象的实现。不过,您可以通过参数获得此引用

class base {

  var $child1;
  var $child2;

  function xcv() {
    $this->child1 = new objChild1();
    $this->child2 = new objChild2($this);
  }
}

class objChild1 {
  var $fruit = "apple";
}

class objChild2 {
  objChild2($parent) {
    $this->parent = $parent;
  }
  function getChild1Fruit() {
    echo $this->parent->child1->fruit;
  }
}

你做的编辑是对的。一个对象没有在中使用的对象的实现。不过,您可以通过参数获得此引用

class base {

  var $child1;
  var $child2;

  function xcv() {
    $this->child1 = new objChild1();
    $this->child2 = new objChild2($this);
  }
}

class objChild1 {
  var $fruit = "apple";
}

class objChild2 {
  objChild2($parent) {
    $this->parent = $parent;
  }
  function getChild1Fruit() {
    echo $this->parent->child1->fruit;
  }
}

是的,这正是我所追求的,尽管我必须大幅修改代码以适应$this参数。我想这对孙子孙女也同样有效$这个->父->父->子->水果。我在想,如果沿着这条路走下去,我可能会失去真正的OOP。也许我应该把$FROUT作为一个var传递给OBJCHILD2,这同样有效,是的。我不确定您的代码结构,但从我在示例中看到的情况来看,
extends
的使用将提供一个比传递变量更好的环境。是的,这正是我所追求的,尽管我必须大幅修改代码以适应$this参数。我想这对孙子孙女也同样有效$这个->父->父->子->水果。我在想,如果沿着这条路走下去,我可能会失去真正的OOP。也许我应该把$FROUT作为一个var传递给OBJCHILD2,这同样有效,是的。我不确定您的代码结构,但是从我在示例中看到的情况来看,
extends
的使用将提供比传递变量更好的环境。