PHP面向对象之封装,继承与多态详解

PHP面向对象之封装,继承与多态详解

在普通的编程中,没有涉及架构或者良好的设计,绝大多数都是使用的面向过程的方式。

当编程逐步深入后,就需要合理使用面向对象的知识来设计程序,而不是简单地脑海里有了思路就去写代码来实现,这是比较低级的做法。

面向对象的三大特点:封装、继承、多态。

封装、继承比较好理解,通过一个例子就能看明白:

<?php class VisualObj{ private $Viual=true; protected $width; protected $height; protected $name; } class ActiveX extends VisualObj{ const NamePrefix="ActiveX"; protected static $count=0; public function __construct(string $name,int $width=100,int $height=50){ $this->width=$width; $this->height=$height; self::$count=self::$count+1; if($name==''||$name==null){ $this->SetName(); }else{ $this->name=$name; } } public function GetName(){ return $this->name; } public function SetName(){ $this->name=self::NamePrefix.$this->GetCount(); } public function GetCount(){ return self::$count; } public function GetWidth(){ return $this->width; } public function GetHeight(){ return $this->height; } public function __destruct(){ echo "__destruct".$this->GetCount(); } } $obj1=new ActiveX(''); echo $obj1->GetName(); echo "<br>"; echo $obj1->GetWidth(); echo "<br>"; echo $obj1->GetHeight(); echo "<hr/>"; $obj2=new ActiveX("新的控件",120,60); echo $obj2->GetName(); echo "<br>"; echo $obj2->GetWidth(); echo "<br>"; echo $obj2->GetHeight(); echo "<hr/>"; ?>

静态变量的理解,以前我们做C/S开发的时候,拖放控件到设计界面的时候总是能看到控件名字后面的数字是自动累加的,这个就是静态变量在起作用。

通俗的理解多态就是同样的方法名和参数名实现不同的功能。

在PHP中通过一个例子就好理解了。

1、通过接口演示

<?php interface EditObj{ public function SaveAs(); } class ExcelObj implements EditObj{ public function SaveAs(){ echo "编辑Excel的保存"; } } class WordObj implements EditObj{ public function SaveAs(){ echo "编辑Word的保存"; } } class PptObj implements EditObj{ public function SaveAs(){ echo "编辑Ppt的保存"; } } class app{ public static function EndEdit($obj){ $obj->SaveAs(); } } app::EndEdit(new ExcelObj()); echo "<hr/>"; app::EndEdit(new WordObj()); echo "<hr/>"; app::EndEdit(new PptObj()); echo "<hr/>"; class TxtObj{ public function SaveAs(){ echo "编辑Txt的保存"; } } app::EndEdit(new TxtObj()); ?>

2、通过(抽象)类演示

<?php abstract class EditObj{ public abstract function SaveAs(); public function OutInfo(){ echo '输出信息'; } } class ExcelObj extends EditObj{ public function SaveAs(){ echo "编辑Excel的保存"; } } class WordObj extends EditObj{ public function SaveAs(){ echo "编辑Word的保存"; } } class PptObj extends EditObj{ public function SaveAs(){ echo "编辑Ppt的保存"; } } class app{ public static function EndEdit($obj){ $obj->SaveAs(); } } app::EndEdit(new ExcelObj()); echo "<hr/>"; app::EndEdit(new WordObj()); echo "<hr/>"; app::EndEdit(new PptObj()); echo "<hr/>"; class TxtObj{ public function SaveAs(){ echo "编辑Txt的保存"; } } app::EndEdit(new TxtObj()); ?>

可以看到,最后的TxtObj因为有SaveAs方法,也得到了正确的执行。

我们可以加类型限制:

class app{ public static function EndEdit(EditObj $obj){ $obj->SaveAs(); } }

这样的话,最后的app::EndEdit(new TxtObj());就会报错了。

还可以加类型判断:

class app{ public static function EndEdit($obj){ if($obj instanceof EditObj){ $obj->SaveAs(); }else{ echo "输入的类型错误,不能执行!"; } } }

这样事先的错误截断对用户就会好一些。

对于上面的接口也一样可以这样来做,代码也一样。

到此这篇关于PHP面向对象之封装,继承与多态详解的文章就介绍到这了,更多相关PHP封装 继承 多态内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    设计电脑系统封装|电脑系统封装教程

    设计电脑系统封装|电脑系统封装教程,,电脑系统封装教程不是的,只是虚拟机比较方便。物理机也可以的,只是要通过外界启动来ghost系统。 办法

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法

    php脚本电脑关机|电脑关机的脚本

    php脚本电脑关机|电脑关机的脚本,,1. 电脑关机的脚本推荐 AutoIt 自动化脚本 其他 按键精灵、……、AutoHotKey、vbs …… 2. 电脑关机

    Java创建对象的几种方式

    Java创建对象的几种方式,对象,方法,本文目录Java创建对象的几种方式java中几种创建对象的方式1Java中创建对象的集中方式有那些JAVA创建对

    wps快速的编辑图层|WPS巧用对象图层

    wps快速的编辑图层|WPS巧用对象图层,图层,编辑,快速,wps,1.WPS 如何巧用对象图层一、认识对象图层工具及按纽1、您可以在插件工具栏中可以