PHP基础学习day5(继承)

继承的时候跟java一样,继承下来的只能继承父类的public和protected属性和方法继承下来


子类最多只能继承一个父类,如果想让子类C继承多个父类中的属性和方法,那么只能采用多层继承,即让B继承A,然后C再继承B,这样C中就有了A类和B类中的属性和方法。

比如:

class A{
               public $a = 1;
           }
           class B extends A {
               public $b =2;
           }
           class C extends B{
               public $c =3;
               function fn(){
                   echo $this->a;
               }
           }
           $c = new C();
           $c->fn();

如果我们要希望调用父类的 构造方法或者是其他的(public / protected)方法:

①类名::方法名()②parent::方法名()

例如:

class B {
               public $b =2;
               public function fn(){
                   echo "我是B类<br>";
               }
           }
           class C extends B{
               public $c =3;
               function fn(){
                   echo "我是C类<br>";
                   B::fn();
               }
           }
           $c = new C();
           $c->fn();


介绍魔术方法:__call():

当定义的类中,调用没有存在的函数的时候,就会自动调用魔术方法__call
比如:
class C{
               public $c =3;
               public function test(){
                   echo "调用了魔术方法";
               }
               public function __call($name, $arguments)
               {
                   if($name=="test1"){
                       $this->test();
                   }
                   // TODO: Implement __call() method.
               }
           }

           $c = new C();
           $c->test1();

在C类中,没有test1这个方法,因此调用了__call方法,如果调用的函数名为test1那么,就会自动调用test方法。
可以利用这个魔术方法来实现PHP中的重载功能。。。。(虽然听起来很滑稽(#滑稽脸))
意思就是:用一个不存在的函数名调用两个不同的函数。。。。(看起来更滑稽)

下面再来看几个魔术常量:
class C{
               public $c =3;
               public function test(){
                   echo "调用了魔术方法";
                   echo "<br>".__FILE__;
                   echo "<br>".__DIR__;
                   echo "<br>".__METHOD__;
               }
               public function __call($name, $arguments)
               {
                   var_dump($arguments);
                   if($name=="test1"){
                       $this->test();
                   }
                   // TODO: Implement __call() method.
               }
           }
           $c = new C();
           $c->test1(2);









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值