我对这是否可能有点困惑。 我已经在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.
除了主要问题之外,您的代码还显示了另一个问题,因此实际上有两个答案:
- 不可以,不能从另一个同级类中的同级类运行方法。如果需要,该方法应位于父类中。这同样适用于属性。
- 不能在一个对象中使用另一个对象的属性值,即使它们都属于同一类。 在一个对象中设置属性值只会在那里设置其值,因为不同的对象可以具有具有完全不同的值的相同属性。如果需要在对象之间共享属性的值并能够对其进行修改,则应使用静态属性。在这种情况下,您必须在父类中定义它,请参阅我之前的观点。
所以要让它工作,你需要类似的东西
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');
举个例子。