Php OOP-子类调用父类';方法而不丢失其上下文
我有一个从类a继承的类B。类a定义了一个方法,例如toArray(),它将循环遍历属性并返回一个数组 我想调用$b->toArray()并获取b而不是A的属性数组(尽管该方法是在A中定义的) 大概是这样的:Php OOP-子类调用父类';方法而不丢失其上下文,php,oop,inheritance,Php,Oop,Inheritance,我有一个从类a继承的类B。类a定义了一个方法,例如toArray(),它将循环遍历属性并返回一个数组 我想调用$b->toArray()并获取b而不是A的属性数组(尽管该方法是在A中定义的) 大概是这样的: class A{ public function toArray(){ return get_object_vars($this); //$this WHAT is $this?! I want it to be different depending on the
class A{
public function toArray(){
return get_object_vars($this); //$this WHAT is $this?! I want it to be different depending on the which class is instantiated.
}
}
class B extends A{
public $my_var = 'Some value';
}
$b = new B;
$b->toArray(); //should contain my_var
上述代码失败。它将不返回任何内容,因为A没有属性。我如何使用OOP实现这一点(更准确地说,是PHP,但如果有一个通用的解释就更好了)。好的方法本身是正确的,但问题是,在类a中没有函数
toArray()
您必须将函数foo()
重命名为toArray()
请尝试以下方法:
class A {
public function toArray() {
return get_object_vars( $this ); //$this WHAT is $this?! I want it to be different depending on the which class is instantiated.
}
}
class B extends A {
public $my_var = 'Some value';
}
$b = new B;
var_dump( $b->toArray() ); //should contain my_var
输出:
array(1) {
["my_var"]=>
string(10) "Some value"
}
(除非您的子变量声明为私有)。。。。。尽管您放弃了返回的值,但没有对itexcellent执行任何操作!但是由于$this是子类,我认为属性在该contextNo中是可见的,$this是子类的实例,但是该方法在父类的继承上下文中运行,并且属性可见性适用,因此private在运行它的继承上下文之外是不可见的现在我知道了,结果我还是一无所获。toArray是我在现实世界中的函数,所以当我在这里写它时,我感到困惑。当然,这只是我实际课堂的一部分。我已经将输出添加到我的答案中,正如您在本例中看到的,它是有效的,所以我想您遇到的问题是另一个问题。你看过错误日志了吗?@VictorFerreira很简单,他没有使用像
var\u dump
这样的输出结构。这个代码对我有用。