Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php OOP-子类调用父类';方法而不丢失其上下文_Php_Oop_Inheritance - Fatal编程技术网

Php OOP-子类调用父类';方法而不丢失其上下文

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

我有一个从类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 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
这样的输出结构。这个代码对我有用。