带有继承的奇怪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