Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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错误_Php_Inheritance - Fatal编程技术网

带有继承的奇怪php错误

带有继承的奇怪php错误,php,inheritance,Php,Inheritance,基本上,我有一堆相互继承的类。为了更好地说明我的观点: IndexController extends fController extends fControllerAbstract extends MoorActionController extends MoorAbstractController 因此,该组中最高的父级是MoorAbstractController 在每个_构造()中,都有一个父::_构造();除了最底层的子类——IndexController 所以我遇到的问题是(我

基本上,我有一堆相互继承的类。为了更好地说明我的观点:

IndexController extends fController extends fControllerAbstract extends 
MoorActionController extends MoorAbstractController 
因此,该组中最高的父级是MoorAbstractController

在每个_构造()中,都有一个父::_构造();除了最底层的子类——IndexController

所以我遇到的问题是(我用一个奇怪的补丁解决了这个问题,但我想知道发生了什么):

我在fController中有一个由IndexController继承的字段成员,但由于某种奇怪的原因,该值没有被传递下去。因此,在IndexController中回显$this->field_成员不会输出任何内容。字段成员本身会被传递,但它所包含的值不会被传递。我修复此错误的方法是在fController中调用_construct()的最后一个内部调用parent::_construct()

更奇怪的是,当测试它时,向上一级(fcontrollerastract将一个字段成员传递给fController)可以完全正常工作。我真的不知道发生了什么事

下面是一些代码:

//WORKS
class fController extends fControllerAbstract
{
protected $field_member = null;

public function __construct()
{        
    $this->field_member="asdasdas";

    parent::__construct();

}
}


//DOESNT WORK
class fController extends fControllerAbstract
 {
protected $field_member = null;

public function __construct()
{
    parent::__construct();

    $this->field_member = "asdasdas"; //value doesnt get passed


}
}
//IndexController/ // /  //
class IndexController extends fController {

public function beforeAction()
{

}

public function home()
{
    echo $this->field_member; 
}
}

// fControllerAbstract ////////
class fControllerAbstract extends MoorActionController
{
public function __construct()
{
    parent::__construct();
}


}

在PHP5.2和5.3上对我有用。你的问题在别处。仔细检查调用
->home()
的代码


你能写一个10行代码来说明这个问题吗?它应该是fController中未显示在IndexController public、protected或private中的属性?如果希望子类继承它,则它不能是私有的。或者它可能没有声明为属性,而只是在稍后调用的父构造函数中设置的?@volk:add please
fcontrollerastract
,并显示如何调用所有这些。现在,我看到两个案例的结果完全相同,就像您需要一个花哨的shmancy编辑器,可以进行断点/步进调试,以便跟踪问题。
abstract class fControllerAbstract 
{
    public function __construct()
    {

    }

}

class fController extends fControllerAbstract
{
    protected $field_member = null;

    public function __construct()
    {
        parent::__construct();

        $this->field_member = "asdasdas"; //value doesnt get passed


    }
}

class IndexController extends fController 
{

    public function beforeAction()
    {

    }

    public function home()
    {
        echo $this->field_member; 
    }
}


$ic = new IndexController();
$ic->home(); // output: asdasdas