从零开始学习PHP(五):面向对象
文章目录
- 什么是面向对象?
- 实现面向对象
- 继承
- 封装
- 多态
- 其他内容
一谈到面向对象,就会出现面向对象的三大特征,封装、继承和多态。那么面向对象和面向过程有什么区别,有什么优势。
什么是面向对象?
面向对象是一种编程思想也叫OOP,个人理解是把一个事务进行抽象化,不再具体去讨论这个事务的执行过程。而是将事务的各个功能逻辑进行抽象化,进行总结归类。
举个面向过程和面向对象的例子:开发一个五指棋程序
在面向过程中:黑棋-》绘制棋盘-》白旗-》绘制棋盘
面向对象中:下棋-》绘制棋盘
在面向过程中,是将一个事务的过程完整的从头到尾的呈现出来,在面向对象中是将问题进行抽象成一类。如:黑棋和白旗走法是一样的,抽象出来。棋盘的绘制也是一样的抽象出来,相互集合起来就完成一个业务流程。
实现面向对象
php中是通过类来实现面向对象的!
一个类包含成员属性和成员方法(函数)例如:
<?php
class Person{
public $stu1 = '小明';//成员属性(变量)
public $stu2 = '小红';
public function eat(){
echo $this->stu1."在吃饭<br>";
}
public function sleep(){
echo $this->stu2."在睡觉";
}
}
$obj = new Person();
$obj->eat();
$obj->sleep();
上面我们抽象出一个person类,即人对象,小明,小红都是人,人都可以睡觉和吃东西。这就是将一个事务的相同特征抽象出来归纳成为一个类,在实际开发中会将一个模块归纳成一个类,在类中进行业务操作。
继承
我们新建两个类 Man和Woman来继承Person类,继承使用extends关键字
<?php
class Person{
public $stu1 = '小明';//成员属性(变量)
public $stu2 = '小红';
public function eat(){
echo $this->stu1."在吃饭<br>";
}
public function sleep(){
echo $this->stu2."在睡觉<br>";
}
}
class Man extends Person
{
public function sleep(){
echo $this->stu1."在睡觉<br>";
}
}
class Woman extends Person
{
public function play(){
echo $this->stu2."在跳皮筋<br>";
}
}
$man = new Man();
echo $man->stu1."<br>";
$man->eat();
$man->sleep();
$woman = new Woman();
echo $woman->stu2."<br>";
$woman->sleep();
$woman->play();
在结果中我们看到,子类已经继承了父类的方法和成员变量,在Man类中重写了sleep方法,在woman类中新增了play方法。
封装
在上面的例子中我们就可以看到封装的例子,子类继承了父类的方法,通过子类去调用父类的方法,子类中没有父类方法,我们不知道方法的逻辑,只是调用,这就相当于封装。
封装的作用还有许多,php内置的函数就相当于封装,我们使用这些内置函数,不清楚怎么实现功能的逻辑,直接调用就可以了。还有许多封装的类和接口,提供外部使用,也提高了安全性。
多态
多态是描述一种事务在不同的条件下,展示出不同的状态:如公司的职员有不同的职位正在做不同的事情,获取不同职位在做什么,那么这就是多态例如:
<?php
class employee{ //定义员工父类
protected function working(){ //定义员工工作,需要在子类的实现
echo "本方法需要在子类中重载!";
}
}
class painter extends employee{ //定义油漆工类
public function working(){ //实现继承的工作方法
echo "油漆工正在刷漆!\n";
}
}
class typist extends employee{ //定义打字员类
public function working(){
echo "打字员正在打字!\n";
}
}
class manager extends employee{ //定义经理类
public function working(){
echo "经理正在开会!";
}
}
function printworking($obj){ //定义处理方法
if($obj instanceof employee){ //若是员工对象,则显示其工作状态
$obj->working();
}else{ //否则显示错误信息
echo "Error: 对象错误!";
}
}
printworking(new painter());//显示油漆工的工作
printworking(new typist());//显示打字员的工作
printworking(new manager());//显示经理的工作
执行一个工作,我们实例不同的身份那么就会执行不同的行为,就实现了多态!
其他内容
在类中还有其他比较重要的内容:
1.修饰符 如public private protected的作用
2.抽象类,接口类,抽象方法,作用和区别
3.设计模式
以上就不展开写了,想要了解可以自行去搜索
还没有评论,来说两句吧...