我一开始以为
<?php
abstract class A{
abstract function a( );
}
class B extends A{
function a( ){
echo 10;
}
}
$bb=new B( ) ;
$bb->f( );
?>
报错。。。。。提示
fatal error: Cannot call abstract method A::a() in D:\wamp\www\1.php on line 10
经大牛指点,A类的名字是A,而里头又没显式声明构造函数,而a函数又与类A重名,于是会按照约定将重名的函数定义成构造函数。。。。
于是实例化B类时,由于B没有构造函数,于是就会调用A的构造函数,而a方法又明显没方法体,不能被调用的。。
解决方法就是将class A或者function a( )的任何一个字母改掉,不重合就好。。
注:php中只有变量名大小是敏感的,类名,类中方法属性这些都不区分大小写。。。
做了个实验:
<?php
class A{
function a( ){
echo 10;
}
}
new A( ); //果然直接输出10,重名的方法,相当于一个构造函数。
?>