php一个奇怪的问题。

我一开始以为

<?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,重名的方法,相当于一个构造函数。
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值