Php 考虑到从父类中调用子类的场景,子类可以与父类交互吗?

Php 考虑到从父类中调用子类的场景,子类可以与父类交互吗?,php,class,Php,Class,我不知道如何解释它,但是如果有一个B类被a类引用,B类是否可以与a类交互 class A { function A($name) { $this->name = $name; } function addB($name) { $this->b = new B($name); } } class B { function B($name) { $this->name = $name;

我不知道如何解释它,但是如果有一个B类被a类引用,B类是否可以与a类交互

class A {
    function A($name) {
        $this->name = $name;
    }
    function addB($name) {
        $this->b = new B($name);
    }
}
class B {
    function B($name) {
        $this->name = $name;
        echo $a->name; // should echo $name set on class A
    }
}
$a = new A("x");
$a->addB("y");

您可以使用getter返回变量

class A {
  private $myPrivateVar;
  function __construct() {
    $this->myPrivateVar = 100;
  }
  // Accessor (AKA getter)
  public function getMyPrivateVar() {
    return $this->myPrivateVar;
  }
  // Mutator (AKA setter)
  public function setMyPrivateVar($newVar) {
    $this->myPrivateVar = $newVar;
  }
}

class B {
  function __construct() {
    $a = new A();
    $thePrivateVarFromA = $a->getMyPrivateVar();
    $newVal = $thePrivateVarFromA * 100;
    $a->setMyPrivateVar($newVal);
  }
}

请参阅答案以获取详细信息。

回到这个问题,这就是我如何处理这篇文章中提出的问题,将父类引用发送到子类:
new\u child($name,$this)

class\u父级{
函数_父函数($name){
$this->name=“我是$name”;
$this->childs=array();
}
函数addToName($name){
$this->name.=“+父亲”$name;
}
函数addChild($name){
$this->childs[]=new\u child($name,$this);
}
}
班级儿童{
函数_子函数($name,$parent){
$this->name=“我是$name”;
$this->brothers=0;
$parent->addToName($name);
foreach($parent->childs as$child){
$child->hasBrother($name);
}
}
函数名($name){
$this->name.=“+$name的哥哥”;
$this->brothers=1;
}
}
$a=新母公司(“a”);
$a->addChild(“B1”);
$a->addChild(“B2”);
$a->addChild(“B3”);
回声“;印刷费($a);回声“;

欢迎评论

我如何从类B中访问getMyPrivateVar()?好的,我理解你的观点,但这不是我要问的。考虑到从类a中调用类B的场景,类B是否可以与类a相互关联?是的,您可以在类B中创建类a的实例变量,然后在a中创建一个新的B实例,并从a中设置变量。这些变量中的每一个都是新实例,并且彼此独立。但是,如果A包含一个静态变量,它将在类A的所有实例中共享,可以从B设置。这有意义吗?好的,这有意义,但仍然不是我想要实现的。我想知道是否有一种方法可以从类B内部(从类a现有实例调用)与现有的类a实例连接。创建类a的新实例不是我想要的。
class _parent {
    function _parent($name) {
        $this->name = "I'm $name";
        $this->childs = array();
    }
    function addToName($name) {
        $this->name .= " + father of " . $name;
    }
    function addChild($name) {
        $this->childs[] = new _child($name, $this);
    }
}
class _child {
    function _child($name, $parent) {
        $this->name = "I'm $name";
        $this->brothers = 0;
        $parent->addToName($name);
        foreach ($parent->childs as $child) {
            $child->hasBrother($name);
        }
    }
    function hasBrother($name) {
        $this->name .= " + older brother of $name";
        $this->brothers = 1;
    }
}
$a = new _parent("A");
$a->addChild("B1");
$a->addChild("B2");
$a->addChild("B3");
echo "<pre>"; print_r($a); echo "</pre>";