设为首页 收藏本站
查看: 973|回复: 0

[经验分享] php面向对象学习

[复制链接]

尚未签到

发表于 2015-8-23 16:16:23 | 显示全部楼层 |阅读模式
  
近期跟着别人开发一套php程序,深感自己面向对象很白痴,于是再次巩固了一下面向对象的学习,自己整理了一下这几天面向对象的东西,给大家分享!!
  面向对象的三大特性:
  封装 -- 隐藏内部实现,稳定外部接口
  继承 -- 子类继承父类成员,实现代码复用
  多态 -- 不同子类对同一消息做出不同的反映
  一、接口 -- 是一套规范,遵守这个规范就可以实现功能
  在PHP中,接口同样是一种规范和标准,可以约束类的行为,定义一个接口不指定具体的实现。
  接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。
  注意:
     接口不能单独存在。接口不能像实例化一个类那样实例化接口。接口不能包含实现其成员的任何代码,而只能定义成员本身。实现接口必须在引用接口的类中实现。
  一个类可以支持多个接口,多个类也可以支持相同的接口。所以接口的概念让用户和其他开发人员更容易理解其他人的代码。
  二、多态性
  1、指不同的对象收到相同消息时,会产生不同行为
2、同一个类在不同的场合下表现出不同的行为特征
  三、抽象类和抽象方法
  1、抽象类用来列举一个类所需要的行为
2、抽象类不明确提供具体实现方法
3、抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)
4、抽象类不能被实例化
5、抽象类不能被锁(final修饰)
  四、抽象类的使用场合
  1、抽象类和抽象方法实现多态性
2、父类提供一系列规定,约束子类的行为
3、父类可以提供一些共性的行为
以上就是我对面向对象的总结,下面就是详细的说说php面向对象的重点,难点!
类: 链接标记预览源代码 链接标记打印链接标记关于01<?php
  02/*
  03                                                类的基本知识
  04 1、类使用class关键字定义,类的名称每个单词首字母大写
  05 2、类的属性必须用封装关键字修饰(public、protected、private)
  06 3、类的方法可以不被封装关键字修饰,默认为:public
  07 4、类中的构造函数:__construct(){},默认为空,可初始化属性。
  08    也可以重载构造函数,有任意多个参数。注意:PHP中构造函数
  09        只能有一个。
  10 5、类中的析构函数:__destruct(){}
  11*/
  12/*
  13                                                类的封装关键字
  14 1、public                -- 公开的
  15 2、protected        -- 受保护的
  16 3、private     -- 私有的
  17   
  18 就是因为使用了受保护的或私有的封装关键字,所以产生了读写方法,
  19 于是写方法可以验证数据的合法性;读方法可以将受保护或私有的属
  20 性保护起来不被外部修改。
  21   
  22 4、__get($n){return $this->$n;}  读方法
  23 5、__set($n,$v){$this->$n=$v;}   写方法
  24  
  25*/
  26class People{
  27        private $name;
  28        private $age;
  29        private $sex;
  30  
  31        //构造函数
  32        function __construct($name,$age=18,$sex="男"){
  33                $this -> name = $name;
  34                $this -> age  = $age;
  35                $this -> sex  = $sex;
  36                echo $this -> show();
  37        }
  38  
  39        //析构函数
  40        function __destruct(){
  41                //echo "{$this->name}被释放了!";
  42        }
  43  
  44        //读属性
  45        function __get($n){
  46                if($n == "name"){
  47                        return $this -> $n;
  48                }
  49        }
  50  
  51        //写属性
  52        function __set($n,$v){
  53                if($n == "name"){
  54                        $this -> $n = $v;
  55                }
  56        }  
  57  
  58        public function show(){
  59                return "恭喜你!创建{$this->name}对象成功!";
  60        }
  61}
  62  
  63/*
  64                                                继承
  65 1、使用关键字extends
  66 2、被继承的类叫做:父类(基类)
  67 3、继承的类叫做:子类(派生类)
  68 4、单一继承
  69 5、具有传递性,即:父类有的,子类也会有
  70 6、子类的封装关键字级别不能低于父类
  71 7、父类构造函数也会被继承
  72 8、重载
  73*/
  74class Stu extends People{
  75         
  76  
  77        public function show(){
  78                return parent::show()."O(&cap;_&cap;)O哈哈~";  
  79        }
  80}
  81$stu = new Stu("张三");
  82echo $stu -> name;
  83?>
抽象类: 链接标记预览源代码 链接标记打印链接标记关于01<?php
  02/*
  03                                                抽象类
  04 1、使用abstract关键字修饰的类叫抽象类,类中至少有一个抽象方法,
  05        可以有具体方法。
  06 2、抽象类不能被实例化,不能被锁(final修饰),只能被继承
  07 3、抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)
  08*/
  09abstract class Animal{
  10        protected $name;
  11        protected $age;
  12        protected $weight;
  13  
  14        abstract function __construct();
  15  
  16        abstract function eat($name);
  17  
  18        abstract function sleep();
  19  
  20        static function show($what){
  21                return "我是{$what->name}!";
  22        }
  23}
  24  
  25//Dog类
  26class Dog extends Animal{
  27         function __construct($name,$age,$weight){
  28                $this -> name = $name;
  29                $this -> age = $age;
  30                $this -> weight = $weight;
  31         }         
  32  
  33         function eat($n){
  34                return $this->name."在吃".$n;
  35         }
  36  
  37         function sleep(){
  38                return $this->name."睡的正酣!";
  39         }
  40  
  41         function wangwang(){
  42                return "汪汪叫!!!";
  43         }
  44}
  45  
  46//Cat类
  47class Cat extends Animal{
  48         function __construct($name,$age,$weight){
  49                $this -> name = $name;
  50                $this -> age = $age;
  51                $this -> weight = $weight;
  52                echo $this->miaomiao();
  53         }         
  54  
  55         function eat($n){
  56                return $this->name."在吃".$n;
  57         }
  58  
  59         function sleep(){
  60                return $this->name."睡的正酣!";
  61         }
  62  
  63         function miaomiao(){
  64                return "喵喵叫!!!";
  65         }
  66}
  67  
  68$dog = new Dog("旺财",4,"10kg");
  69echo $dog->sleep();
  70echo "";
  71$cat = new Cat("龙猫",2,"5kg");
  72echo "";
  73echo $cat->sleep();
  74echo "";
  75echo Animal::show($dog);
  76echo "";
  77echo Animal::show($cat);
  78?>
接口: 链接标记预览源代码 链接标记打印链接标记关于01<?php
  02interface IUsb{
  03  const name1="3.0接口";
  04  function type1($what);
  05  function power1();
  06}
  07  
  08interface IApi{
  09  const name2="扩展插槽";
  10  function type2();
  11  function power2();
  12}
  13  
  14class Pc implements IUsb,IApi{
  15  
  16        function type1($what){
  17                if($what == IUsb::name1){
  18                        return IUsb::name1.$this->power1();
  19                }
  20                else{
  21                        return "接口不对,无法使用!";
  22                }
  23        }
  24  
  25        function power1(){
  26                return "接口正确,电源开启中...";
  27        }
  28  
  29        function type2(){}
  30  
  31        function power2(){}
  32}
  33  
  34class Mp3 implements IUsb{
  35  public $name = IUsb::name1;
  36  function type1($s){}
  37  function power1(){}
  38}
  39$p = new Pc();
  40$mp3 = new Mp3();
  41echo $p -> type1($mp3->name);
  42?>
希望对大家的php学习有所帮助,呵呵,反正这几天我重温面向对象收获很多,也提醒广大同学,温故而知新!!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103096-1-1.html 上篇帖子: php设计模式——单例模式 下篇帖子: PHP笔记(PHP高级篇)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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