解析PHP面向对象的三大特征
2018-06-22 05:20:49来源:未知 阅读 ()
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>=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}<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("张三",22,"男","总监"); $zhangsan->setSex("女"); $zhangsan->setAge(30); // $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());//子类对象
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash