如何读懂PHP面向对象的三大特性,有什么简单实例

Admin 2022-08-02 群英技术资讯 310 次浏览

今天就跟大家聊聊有关“如何读懂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面向对象的三大特性,有什么简单实例都有更深刻的体会了吧。这里是群英网络,小编将为大家推送更多相关知识点的文章,欢迎关注! 群英智防CDN,智能加速解决方案
标签: php面向对象

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服