周大胖子 发表于 2018-7-22 01:24:14

PHP 类的继承 与 对象的重载

来来来,先了解几个概念:
1,基类:比较大的类。(例如 汽车);
2,子类:具有很多相同的属性和方法,可以采用继承基类的属性和方法;
写法:
class Lanniao extends Car
    {
      // 这样的取值有问题parent:: 属性名是错误的, 应该是
      // public $amm = $this->name;

      function __construct(){
            print '进入了子类      }

      function abc(){
            $ab = parent::showShop();
            $ac = parent::showPop();
            echo '<br/>子类访问测试——————'.$ab;
            echo '<br/>子类访问测试——————'.$ac;   // 私有属性也可以这么访问 但是直接访问不行
      }
      
      
    }//继承了 car 父类

周大胖子 发表于 2018-7-22 01:51:41

啥是重载呢?
重载---------就是童泰创建属性和方法,通过魔术方法来实现【别问我啥是魔术方法 :参考文献: http://www.php.net/manual/zh/language.oop5.magic.php】
类与对象的重载参考文献:http://www.php.cn/php-weizijiaocheng-392407.html

1.属性的重载

    class Car
    {
      
      private $arr= array();

      public function __set($key,$val){
            print '进入了子类            $this -> ary[$key] = $val ;
      }

      public function __get($key){
            if(isset($this->ary[$key])){
                return $this->ary[$key];
            }
            return null;//后面省略两个判断
      }
      
    }

    $car = new Car();
    $car-> name ="汽车";   //name属性动态创建并且 赋值
    echo $car->name ;

    //上述代码有错误 待检测
   

    总结:属性的重载通过 __set , __get ,__isset ,__unset 来分别实现对不存在属性的赋值,读取,判断属性是否设置,销毁属性

方法的重载:

    class Car
    {
      
      public $speed = 0;

      public function __call($name,$args){
         if($name == 'speedUp'){
            $this ->speed +=10;
         }
      }

   
    }

    $car = new Car();
    $car-> speedUp();
    echo $car ->speed;   

    // 总结:方法的重载通过 __call 来实现,当调用不存在的方法,将会转为参数调用call 方法, 当调用不存在的静态方法,贼会调用__call static[我怎么感觉我笔记本上少了一个]

   
?>




页: [1]
查看完整版本: PHP 类的继承 与 对象的重载