解析PHP面向对象的三大特征
class BenHang extends Card{
     /*构造函数与及构造的继承*/
     function __construct($cardno,$pwd, $name,$money){
         parent::__construct($cardno,$pwd, $name,$money);
     }
     function take($money){
         echo "本行取款{$money}没有手续费·····<br>";
     }
    function zhuan($money){
         echo "本行转账{$money}·····<br>";
     }
 }
$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元·····<br>";
     }
}
$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}生!<br>";
        }
    }
    class Student extends Person{                       //子类继承父类
        public $school;                                           function __construct($name,$sex,$school){          //子类的构造函数
            parent::__construct($name,$sex);        //调用父类构造进行复制
            $this->school = $school;
        }
        function program(){
            echo "PHP真好玩!我爱PHP!PHP是世界上最好用的编程语言!<br>";
        }
        function say(){
            parent::say();                      //重写父类的同名方法
            echo "我是{$this->school}的";
        }
    }
    $zhangsan = new Student("张三","男","起航");
    $zhangsan->say();
    $zhangsan->program(); 
二、封装
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>=&&$age<=){
            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}<br>";
        }
    }
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("张三",,"男","总监");
    $zhangsan->setSex("女");
    $zhangsan->setAge();
//  $zhangsan->setPosition("董事长");
    $zhangsan->position="董事长";
    $zhangsan->name="lisi";
    $zhangsan->say();
     
/*墨盒接口
* 纸张接口*/
interface InkBox{
function color();
}
interface Paper{
function sizes();
}
class Computer{
function fangfa(InkBox $a,Paper $b){ //父类引用
echo "即将开始打印····<br>";
$a->color();
$b->sizes();
echo "打印结束···<br>"; }
} class Color implements InkBox{
function color(){
echo "正在装载彩色墨盒<br>";
echo "实现彩色墨盒<br>";
}
}
class White implements InkBox{
function color(){
echo "正在装载黑白墨盒<br>";
echo "实现黑白墨盒<br>";
}
}
class A4 implements Paper{
function sizes(){
echo "正在加载A4纸张<br>";
echo "实现A4纸张<br>";
}
}
class A5 implements Paper{
function sizes(){
echo "实现A5纸张<br>";
}
} $com=new Computer();//创建对象
$com->fangfa(new Color(),new A4());//子类对象
解析PHP面向对象的三大特征的更多相关文章
- 全面解析PHP面向对象的三大特征
		PHP面向对象的三大特征: 继承,封装,多态 一.继承 1.如何实现继承? 给子类使用extends关键字,让子类继承父类: class Student extends Person{} 2.实现继承 ... 
- Java面向对象的三大特征
		Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ... 
- C#学习笔记7:多态是面向对象的三大特征(封装、继承、多态)之一
		多态: 多态是面向对象的三大特征(封装.继承.多态)之一. 什么是多态? 一个对象表现出多种状态. 多态的实现方法: 1.虚方法: 2.抽象方法: 3.接口. PS:New 关键词可以隐藏父类的方法. ... 
- OC面向对象的三大特征
		OC面向对象的三大特征 1.OC面向对象的三大特封装 1)封装:完整的说是成员变量的封装. 2)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可 ... 
- Java面向对象的三大特征和五大原则
		Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问 ... 
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
		面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ... 
- Python面向对象初始(三大特征,多态,继承,封装)
		Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ... 
- C#学习基础,面向对象的三大特征
		学习C#编程,相信大家除了经常接触的是hello world之外,更多的是进一步的去熟悉这门语言的基本特征,以及有哪些概念是我们必要掌握了解的,相信大家都是会知道面向对象的三大特性分别是:封装,继承, ... 
- JavaSE| 面向对象的三大特征
		1.面向对象的基本特征之一:封装Encapsulation 目的:隐藏实现细节,让使用者方便,让代码更安全 将对象的属性和行为封装起来,其载体就是类.类通常对客户隐藏其实现细节,这就是封装的思想. 封 ... 
随机推荐
- lua 运算符
			lua 运算符 算术运算符 操作符 描述 + 加 - 减 * 乘 / 除 % 求模 ^ 求幂 示例程序 local a, b = 1, 2 print(a + b) print(a - b) prin ... 
- XtraBackup 原理与安装
			简介 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ... 
- 《JavaScript面向对象编程指南(第2版)》读书笔记(一)
			目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ... 
- 玩转SSH端口转发
			SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),**远程端口转发(Local Port Forwarding)**以及**动态端口转发(Dynamic Port ... 
- Windows 和 Mac 系统下安装git 并上传,修改项目
			首先在MAC上怎么操作. 在gitHub创立一个账户,在创立一个项目,这就不用我说了对吧. 创建完之后是这样的: 接下来,我们打开https://brew.sh 这是下载homebrew的网站,hom ... 
- 完美实现在同一个页面中使用不同样式的artDialog样式
			偶然发现artDialog.js这个插件,就被其优雅的设计及漂亮的效果深深吸引,在做例子时碰到了一些想当然它应该提供但却没有提供的功能,不过这都不影响我对它的喜爱,下面说一下遇到的问题吧! artDi ... 
- 开始更新webpack踩坑笔记
			今天开始学习webpack,记录下踩过的坑-zxf 
- [Splay模版1]
			输入 第1行:1个正整数n,表示操作数量,100≤n≤200,000 第2..n+1行:可能包含下面3种规则: 1个字母'I',紧接着1个数字k,表示插入一个数字k到树中,1≤k≤1,000,000, ... 
- 蓝桥杯-分小组-java
			/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ... 
- 蓝桥杯- 奇妙的数字-java
			/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ... 
