0

0

解析PHP面向对象的三大特征

巴扎黑

巴扎黑

发布时间:2017-06-26 15:20:33

|

1765人浏览过

|

来源于php中文网

原创

class BenHang extends Card{     /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){
         parent::__construct($cardno,$pwd, $name,$money);
     }    
     function take($money){         echo "本行取款{$money}没有手续费·····
"; }function zhuan($money){ echo "本行转账{$money}·····
"; } }$benhang=new BenHang(123,344,444,444);$benhang->check();$benhang->take(234);$benhang->zhuan(4555);/*其他银行卡的类*/class Qita extends Card{function __construct($cardno,$pwd, $name,$money){ parent::__construct($cardno,$pwd, $name,$money); } function take($money){ echo "非本行取款{$money}有手续费2元·····
"; } }$qita=new Qita(123,344,444,444);$qita->check();$qita->take(99);

                                       php面向对象的三大特征:  继承,封装,多态

一.继承

1、如何实现继承?

     给子类使用extends关键字,让子类继承父类;

        class Student extends Person{}

2、实现继承的注意事项?

   ① 子类只能继承父类的非私有属性。

   ②子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用。

   ③ PHP只能单继承,不支持一个类继承多个类。但是一个类进行多层继承;

        class Person{}

         class Chengnian extends Person{}

         class Student extends Chengnian{}

  //Student类就同时具有了Chengnian类和Person类的属性和方法

3、方法覆盖(方法重写)

       条件① 子类继承父类。

        条件② 子类重写父类已有方法。

        符合上述两个条件,称为方法覆盖。覆盖之后,子类调用方法,将调用子类自己的方法。

       同样,除了方法覆盖,子类也可以具有与父类同名的属性,进行属性覆盖。

   4、如果,子类重写了父类方法,如何在子类中调用父类同名方法?

      partent::方法名();

      所以,当子类继承父类时,需在子类的构造中的第一步,首先调用父类构造进行复制。

       function __construct($name,$sex,$school){

             parent::__construct($name,$sex);

             $this->school = $school;

       }

实例一枚:

class Person{protected $name;public $sex;
        function __construct($name,$sex){     //声明构造函数            $this->name = $name;
            $this->sex = $sex;
        }
        function say(){
            echo "我叫{$this->name},我是{$this->sex}生!
"; } } class Student extends Person{ //子类继承父类public $school; function __construct($name,$sex,$school){ //子类的构造函数 parent::__construct($name,$sex); //调用父类构造进行复制$this->school = $school; } function program(){ echo "PHP真好玩!我爱PHP!PHP是世界上最好用的编程语言!
"; } function say(){ parent::say(); //重写父类的同名方法echo "我是{$this->school}的"; } } $zhangsan = new Student("张三","男","起航"); $zhangsan->say(); $zhangsan->program();

 

二、封装

  1、什么是封装?
   通过访问修饰符,将类中不需要外部访问的属性和方法进行私有化处理,以实现访问控制。
【注意】是实现访问控制,而不是拒绝访问。 也就是说,我们私有化属性之后,需要提供对应的方法,让用户通过我们提供的方法处理属性。
2、封装的作用?
    ①使用者只关心类能够提供的功能,而不必关心功能实现的细节!(封装方法)
    ②对用户的数据进行控制,防止设置不合法数据,控制返回给用户的数据(属性封装+set/get方法)
  3、实现封装操作?
   ① 方法的封装
    对于一些只在类内部使用的方法,而不像对外部提供使用。那么,这样的方法我们可以使用private进行私有化处理。
     private function formatName(){}        //这个方法仅仅能在类内部使用$this调用
         function showName(){
          $this -> formatName();
       }
②属性的封装+set/get方法
  为了控制属性的设置以及读取,可以将属性进行私有化处理,并要求用户通过我们提供的set/get方法进行设置
         private $age;
         function setAge($age){
         $this->age = $age;
          }
        function getAge(){
           return $this->age;
         }
        $对象 -> getAge();
        $对象 -> setAge(12);
    ③ 属性的封装+魔术方法
      private $age;
       function __get($key){
            return $this->$key;
        }
      function __set($key,$value){
           $this->$key=$value;
       }
        $对象->age;       // 访问对象私有属性时,自动调用__get()魔术方法,并且将访问的属性名传给__get()方法;
        $对象->age=12;    // 设置对象私有属性时,自动调用__set()魔术方法,并且将设置的属性名以及属性值传给__set()方法;
【 注意】在魔术方法中,可以使用分支结构,判断$key的不同,进行不同操作。
  4、关于封装的魔术方法:
     ① __set($key,$value):给类私有属性赋值时自动调用,调用时给方法传递两个参数:需要设置的属性名、属性值;
     ② __get($key):读取类私有属性时自动调用,调用时给方法传递一个参数:需要读取的属性名;
     ③ __isset($key):外部使用isset()函数检测私有属性时,自动调用。
       >>> 类外部使用isset();检测私有属性,默认是检测不到的。false
       >>> 所以,我们可以使用__isset();函数,在自动调用时,返回内部检测结果。
       function __isset($key){
              return isset($this->$key);
            }
当外部使用isset($对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!
    ④ __unset($key):外部使用unset()函数删除私有属性时,自动调用;
       function __unset($key){
           unset($this->$key);
           }
  当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理。
实例一枚
class Person{public $name;public $age;public $sex;
        function __construct($name, $age,$sex){
            $this->name=$name;
            $this->setAge($age);
            $this->setSex($sex);
        }
        function setAge($age){if($age>=0&&$age<=120){return $this->age=$age;
            }else{
                die("年龄输入有误!!!");
            }
        }
        function setSex($sex){if($sex=="女"||$sex=="男"){return    $this->sex=$sex;
            }else{
                die("性别输入有误!!!");
            }
        }
        function say(){
            echo "我的名字叫{$this->name},我的年龄{$this->age},我的性别是{$this->sex}
"; } }class Work extends Person{private $position; function __construct($name, $age,$sex,$position){ parent::__construct($name, $age,$sex); $this->job=$job; $this->setPosition($position); } function setPosition($position){ $arr=['总监','董事长','程序员','清洁工'];if(in_array($position, $arr)){return $this->position=$position; }else{ die("不存在该职位"); } } function __set($key,$value){if($key=="age"){return parent::setAge($value); } elseif($key=="sex"){return parent::setSex($value); } elseif($key=="position"){return $this->setPosition($value); }return $this->$key=$value; } function say(){ parent::say(); echo "我的职位是{$this->position}"; } } $zhangsan=new Work("张三",22,"男","总监"); $zhangsan->setSex("女"); $zhangsan->setAge(30);// $zhangsan->setPosition("董事长");$zhangsan->position="董事长"; $zhangsan->name="lisi";$zhangsan->say();

 

乐尚团购
乐尚团购

乐尚团购系统,是一项基于PHP+MYSQL为核心开发的一套免费 + 开源专业团购系统。软件具执行效率高、模板自由切换、后台管理功能方便等诸多优秀特点。本软件是基于Web应用的B/S架构的团购网站建设解决方案的建站系统。它可以让用户高效、快速、低成本的构建个性化、专业化、强大功能的团购网站。从技术层面来看,本程序采用目前软件开发IT业界较为流行的PHP和MYSQL数据库开发技术,基于面向对象的编程,

下载

立即学习PHP免费学习笔记(深入)”;

三.多态
  3.1、什么是多态?
     多态实现多态的前提是实现继承。
      1.一个类被多个子类继承,如果这个类的某个方法在多个子类中表现出不同的功能,我们称这种行为为多态。在PHP中的方法重写,
     2.实现多态的必要途径:
      ⑴子类继承父类;
      ⑵重写父类方法;
      ⑶父类引用指向子类对象;
     
/*墨盒接口
 * 纸张接口*/
 interface InkBox{     function color();
 }interface Paper{     function sizes();
 }class Computer{function fangfa(InkBox $a,Paper $b){     //父类引用echo "即将开始打印····
"; $a->color();$b->sizes();echo "打印结束···
"; } }class Color implements InkBox{function color(){echo "正在装载彩色墨盒
";echo "实现彩色墨盒
"; } }class White implements InkBox{function color(){echo "正在装载黑白墨盒
"; echo "实现黑白墨盒
"; } }class A4 implements Paper{function sizes(){echo "正在加载A4纸张
";echo "实现A4纸张
"; } }class A5 implements Paper{function sizes(){echo "实现A5纸张
"; } }$com=new Computer();//创建对象$com->fangfa(new Color(),new A4());//子类对象

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

58

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

52

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

24

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

7

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

406

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

231

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

194

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

150

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号