如何读懂PHP面向对象的三大特性,有什么简单实例
Admin 2022-08-02 群英技术资讯 1556 次浏览
今天就跟大家聊聊有关“如何读懂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 "输入的类型错误,不能执行!";
}
}
}
这样事先的错误截断对用户就会好一些。
对于上面的接口也一样可以这样来做,代码也一样。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下:PHP 代码 => Token => 抽象语法树 => Opcodes => 执行。
php中array_pad()函数的使用:1、可以将某个键值$value插入到数组$array中,从而将数组填补到指定的长度$size。2、array_pad()函数能够在数组尾部插入元素。
做web开发的PHP程序员对JavaScript中的两个定时器函数应该都还熟悉,回到PHP层面就有点傻眼:PHP中有sleep,但是没有(内置)定时器函数可用。sleep函数勉强可以做到,但会导致进程阻塞,期间不能做其他事(或无响应)。为什么PHP没能提供定时器(Timer)这个功能呢?
本文实例总结了PHP常用字符串函数用法。分享给大家供大家参考,具体如下
php设置端口号的方法:首先找到PHP配置文件所在路径;然后通过命令“vim /usr/local/php7/etc/php-fpm.d/www.conf listen = 0.0.0.0:9000”修改端口号即可。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008