就因为没有重载

[不指定 2008/02/18 20:10 | by edwardproAdmin ]
| |
今天碰到一个很妖艳的问题,问题最后出在php没有重载又不报错,直接导致没有构造,使用的PHP版本是:5.2.5,我认为这是一个BUG。由于工作写的类不方便拿出来下面写一个完整的测试环境类给大家看:

abstract class father{
function father($a){
echo "class father";
}
}

class child extends father{
//子类构造函数(这是我错误的一个地方,但它导致了php另外一个错误)
function child(){
echo "test";
}
}

//run
$obj = new child('a');

执行后会发现父类的构造函数根本没有执行!但子类的构造由于参数不对也没有执行。
这个问题很明显:当我在子类中定义了构造函数,按照覆盖原理应该覆盖掉父类的一个构造函数,但是上述情况下由于已经定义了一个非默认参数的构造,这样子类定义的构造自动变成了重载而不是覆盖。而PHP又是不支持重载的,但这个时候应该报错,但神奇的事情发生了,PHP居然执行了,但是他显然没有执行我定义的父类的构造,而是执行了一个默认构造。这是其实产生了无法预知的错误,但PHP却莫名没有报错误,这应该是一个PHP的BUG。
我提交了一个bug report到php.net: http://bugs.php.net/44149


PHP日记 | 评论(0) | 引用(0) | 阅读(456)
发表评论
表情
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]