PHP 兄弟姐妹 Class 继承

PHP Sibling Class Inheritance

我对这是否可能感到有点困惑。我已经在 SO 上查看了几篇帖子,但它们并没有真正解释我在寻找什么。

我有 3 个 class。一个主 class 和两个 class 扩展主 class。 (见下面的代码)。是否可以 运行 两个扩展 class 之一的方法(另一个扩展 class)?

如果不可能,我如何更改我的代码以完成我在下面的示例中所做的事情?

声明

class A {

  public function __construct() {
     //do stuff
  }

}

class B extends A {

  private $classb = array();

  public function __construct() {
     parent::__construct();
     //do stuff
  }

  public function get($i) {
                return $this->classb[$i];
  }

  public function set($i, $v) {
    $this->classb[$i] = $v;
  }

}

class C extends A {

  public function __construct() {
    parent::__construct();
    //do stuff
  }

  public function display_stuff($i) {
    echo $this->get($i);  //doesn't work
    echo parent::get($i);  //doesn't work
  }
}

用法

$b = new B();
$c = new C();

$b->set('stuff', 'somestufftodisplay');
$c->display_stuff('stuff');   //   <----- Displays nothing.

除了主要问题之外,您的代码还显示了一个额外的问题,因此实际上有两个答案:

  1. 不,您不能 运行 来自兄弟 class 的方法在另一个兄弟 class 中。如果你需要,该方法应该在父 class 中。这同样适用于属性。
  2. 您不能在另一个对象中使用一个对象的 属性 值,即使它们是相同的 class。在一个对象中设置 属性 值仅在该对象中设置它的值,因为不同的对象可以具有相同的属性但值完全不同。如果您需要在对象之间共享 属性 的值并且还能够修改它,您应该使用 static property。在这种情况下,您必须在父 class 中定义它,请参阅我之前的观点。

所以要让它工作,你需要像

这样的东西
class A {

  private static $var = array();

  public function get($i) {
     return self::$var[$i];
  }

  public function set($i, $v) {
     self::$var[$i] = $v;
  }
}

class B extends A {

}

class C extends A {

  public function display_stuff($i) {
    echo $this->get($i); // works!
  }
}

$b = new B();
$c = new C();

$b->set('stuff', 'somestufftodisplay');
$c->display_stuff('stuff');

An example.