
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();
立即学习“PHP免费学习笔记(深入)”;
/*墨盒接口
* 纸张接口*/
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面向对象的三大特征的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号