扩展方法 - PHP 同级类继承


extension methods - PHP Sibling Class Inheritance

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

我有3节课。 一个主类和两个扩展该主类的类。 (请参阅下面的代码)。 是否可以在同级(另一个扩展类)的两个扩展类之一中运行方法?

如果不可能,我该如何更改我的代码来完成我在下面的示例中正在执行的操作?

声明

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. 不可以,不能从另一个同级类中的同级类运行方法。如果需要,该方法应位于父类中。这同样适用于属性。
  2. 不能在一个对象中使用另一个对象的属性值,即使它们都属于同一类。 在一个对象中设置属性值只会在那里设置其值,因为不同的对象可以具有具有完全不同的值的相同属性。如果需要在对象之间共享属性的值并能够对其进行修改,则应使用静态属性。在这种情况下,您必须在父类中定义它,请参阅我之前的观点。

所以要让它工作,你需要类似的东西

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');

举个例子。