老莫的笔记本  
  
查看: 933|回复: 1

PHP 类的继承 与 对象的重载

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-7-22 01:24:14 | 显示全部楼层 |阅读模式
来来来,先了解几个概念:
1,基类:比较大的类。(例如 汽车);
2,子类:具有很多相同的属性和方法,可以采用继承基类的属性和方法;
写法:
  1. class Lanniao extends Car
  2.     {
  3.         // 这样的取值有问题  parent:: 属性名是错误的, 应该是
  4.         // public $amm = $this->name;
  5.         function __construct(){
  6.             print '进入了子类        }
  7.         function abc(){
  8.             $ab = parent::showShop();
  9.             $ac = parent::showPop();
  10.             echo '<br/>子类访问测试——————'.$ab;
  11.             echo '<br/>子类访问测试——————'.$ac;   // 私有属性也可以这么访问 但是直接访问不行
  12.         }
  13.         
  14.       
  15.     }  //继承了 car 父类
复制代码
回复

使用道具 举报

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
 楼主| 发表于 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.属性的重载
  1.     class Car
  2.     {
  3.         
  4.         private $arr= array();
  5.         public function __set($key,$val){
  6.             print '进入了子类            $this -> ary[$key] = $val ;
  7.         }
  8.         public function __get($key){
  9.             if(isset($this->ary[$key])){
  10.                 return $this->ary[$key];
  11.             }
  12.             return null;  //后面省略两个判断
  13.         }
  14.       
  15.     }  
  16.     $car = new Car();
  17.     $car-> name ="汽车";   //name属性动态创建并且 赋值
  18.     echo $car->name ;
  19.     //上述代码有错误 待检测
  20.    
  21.     总结:属性的重载通过 __set , __get ,__isset ,__unset 来分别实现对不存在属性的赋值,读取,判断属性是否设置,销毁属性
复制代码
方法的重载:
  1.     class Car
  2.     {
  3.         
  4.         public $speed = 0;
  5.         public function __call($name,$args){
  6.            if($name == 'speedUp'){
  7.             $this ->speed +=10;
  8.            }
  9.         }
  10.    
  11.     }  
  12.     $car = new Car();
  13.     $car-> speedUp();
  14.     echo $car ->speed;   
  15.     // 总结:方法的重载通过 __call 来实现,当调用不存在的方法,将会转为参数调用call 方法, 当调用不存在的静态方法,贼会调用__call static  [我怎么感觉我笔记本上少了一个]
  16.      
  17. ?>
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表