与继承奇怪的PHP错误

时间:2012-02-14 22:34:49

标签: php inheritance

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

IndexController extends fController extends fControllerAbstract extends 
MoorActionController extends MoorAbstractController 

因此,该组中最高的父级是MoorAbstractController。

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

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

我在fController中有一个FieldController继承的字段成员,但由于一些奇怪的原因,该值不会传递下来。因此,在IndexController中回显$ this-> field_member不会输出任何内容。字段成员本身传递下来,但不传递它包含的值。我修复此错误的方法是在fController中的__construct()内部调用parent :: __ construct()。

更奇怪的部分是,当向上测试一级时(fControllerAbstract向下传递一个字段成员到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();
}


}

1 个答案:

答案 0 :(得分:2)

在PHP 5.2和5.3上为我工作。你的问题在别处。仔细检查调用->home()的代码。

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