如何读懂PHP面向对象的三大特性,有什么简单实例
Admin 2022-08-02 群英技术资讯 534 次浏览
在普通的编程中,没有涉及架构或者良好的设计,绝大多数都是使用的面向过程的方式。
当编程逐步深入后,就需要合理使用面向对象的知识来设计程序,而不是简单地脑海里有了思路就去写代码来实现,这是比较低级的做法。
面向对象的三大特点:封装、继承、多态。
封装、继承比较好理解,通过一个例子就能看明白:
<?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 "输入的类型错误,不能执行!"; } } }
这样事先的错误截断对用户就会好一些。
对于上面的接口也一样可以这样来做,代码也一样。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
如何理解PHP状态模式,有哪些要点?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
laravel怎样实现无限级分类?laravel实现无限级分类其实不是很难,但是要做好也是讲究方法和技巧的,下面给大家介绍一个laravel实现无限级分类的方法,希望大家能有收获。
今天小编就为大家分享一篇laravel框架 api自定义全局异常处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
今天小编就为大家分享一篇laravel实现一个上传图片的接口,并建立软链接,访问图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
php架构师的介绍:1、架构师只对最终需求进行审查和确认,并提出需求不清和不完整的部分。2、总是与需求分析师取得联系。架构师是技术专家,不是业务专家。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008