解析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 目的:隐藏实现细节,让使用者方便,让代码更安全 将对象的属性和行为封装起来,其载体就是类.类通常对客户隐藏其实现细节,这就是封装的思想. 封 ...
随机推荐
- netty——私有协议栈开发案例
netty--私有协议栈开发案例 摘要: 在学习李林峰老师的Netty权威指南中,觉得第十二章<私有协议栈开发>中的案例代码比较有代表性,讲的也不错,但是代码中个人认为有些简单的错误,个人 ...
- GreenDao教程1
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的.直接面向对象的,可以通过对对象的操作,实现数据的存储. 但是官网上的API是在不敢恭维,文档写的很糙,看了半天,才搞懂一 ...
- 生产环境-jvm内存溢出-jprofile问题排查
首先线上开启了dump的参数 dump的内容有2G,先进行压缩打包,传输至本地(scp) tar -czvf dump.tar java_pid4824.hprof 使用Jprofile打开dump ...
- Java中遍历Map的常用方法
以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等): 方式一(推荐): // 推荐 // 在for-each循环中使用entr ...
- HTML5 拖放(Drag 和 Drop)功能开发——基础实战
随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的 ...
- Spark机器学习之协同过滤算法
Spark机器学习之协同过滤算法 一).协同过滤 1.1 概念 协同过滤是一种借助"集体计算"的途径.它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度.其内在思想是相 ...
- php框架之我见:php开发到底需不要用框架?
本来就很好,结果无论软件CMS还是各种框架,都自己制造一套自己的规则! 关键还不通用! 我学PHP语法 语义累了半年好不容易熟悉,结果学个框架又学半年,然后框架升级或者去学其他框架,之前学的又等于没用 ...
- Docker - 在Ubuntu16.04中安装Docker CE
Get Docker for Ubuntu Check system version root@Ubuntu16:~# uname -a Linux Ubuntu16 4.8.0-36-generic ...
- HttpClient--HttpGet使用
最近公司在做一个爬虫工具,爬取公司现网的数据,留给方通项目使用 用到里阿帕奇的这两个类,在网上看到了一些资料结合自己的应用,这个贴出一个demo import com.alibaba.fastjson ...
- Python 基础之基本数据类型
首先,Python中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象 ...