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类
"; } } class C extends B{ public $c =3; function fn(){ echo "我是C类
"; 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 "
".__FILE__; echo "
".__DIR__; echo "
".__METHOD__; } public function __call($name, $arguments) { var_dump($arguments); if($name=="test1"){ $this->test(); } // TODO: Implement __call() method. } } $c = new C(); $c->test1(2);









你可能感兴趣的:(有关PHP)