博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的封装性和继承
阅读量:6342 次
发布时间:2019-06-22

本文共 3208 字,大约阅读时间需要 10 分钟。

 

面向对象思想已经存在了好多年了,PHP之前没有面向对象,是PHP开发者后期加上的。

面向对象思想有三大特征,封装,继承,多态,其中多态并不适用于PHP。
之前使用的是public关键词,它的意思是公开的,意思就是只要拿到这个类,谁都可以使
用,谁都可以赋值调用,重新赋值调用。
封装:即禁止某些方法/属性 ,不充许外部调用。并开放部分方法 ,来间接调用。
比如 银行的 ATM, 你可以输入密码 " 检测 " 用户的密码是否正确, 但不能 " 查询 " 用户的密码。
代码 :

1 class ATM{ 2   //protected 受保护的,只允许本类内部使用,外部方法调用。设置了外部无法访问的权 3 限。 4   protected function getPass(){ 5   return '123456'; 6   } public function checkPass($pass){ 7   return $pass == $this->getPass();  8   }}$atm = new ATM(); 9 $atm = checkPass('1234456');10 $atm->getPass(); //出错

以上如果用面向过程的函数来开发,则比较难实现屏蔽的功能。

以上是方法的封装,设置关键词protected关键词,受保护的,可以有效防止外部调用,但内部又可
以使用的策略,同样的方法适用于属性。

1 
sex;11 } } $p = new A;12 //可以输出,因为是public公开的。13 echo $p->name;14 //不能输出,设置了protected受保护的,外部方法调用。15 //echo $p->sex;16 //但如果我就想输出怎么办?17 //可以利用test方法,因为test方法属于A类,让test本类中的方法去调用本类的属性。18 $p->test();

以上我们总结一下:

public 公开的,类内部,外部均可调用。
protected 受保护的,内部可调用,外部无法调用。
另外还有一种,private 私有的,除了自己其他都无法访问

网上有人给我们提供了 一个MySQL 类 , 我们可以直接new使用。

但我如果觉得这个类的某个方法不好 , 或者缺少某个方法 , 怎么办?

类继承的语法:

1 class A{ 2   public function youQian(){ 3   echo "老子有钱"; 4  } 5 }//使用extends关键词继承。 6 // class 子类(用户定义的) extends 父类(现有的类){} 7 class Aa extends A{ 8   public function qiong(){ 9   echo "我是真的穷";10   }11 }//子类继承父类以后,父类的方法可直接使用。12 $erzi = new Aa();13 $erzi->youQain();14 $erzi->qiong();

如果重名会怎么样?

1 class A{ 2   public function youQian(){ 3   echo "老子有钱"; 4   } 5 }//使用extends关键词继承。 6 // class 子类(用户定义的) extends 父类(现有的类){} 7 class Aa extends A{ 8   public function youQian(){ 9   echo "我比你更有钱";10   }11 }//子类继承父类以后,父类的方法可直接使用。12 $erzi = new Aa();13 //如果重名,会直接输出子类的方法,这在PHP面向对象中叫覆盖重写。14 $erzi->youQain();

所以,看需求,你觉得原来的类中,有个方法不好用,可以继承以后重写,有人问,那我直接在原

基础的类上直接修改不行吗?干嘛还要继承以后再重写?

class A{  public function youQian(){  echo "老子有钱";  }   public function benShi(){  echo "老子不光有钱,本事才是最重要的";  }}//使用extends关键词继承。// class 子类(用户定义的) extends 父类(现有的类){}class Aa extends A{  public function youQian(){  echo "我⽐你更有钱";  }}/*注意:虽然我们觉得A类中,youQian()这个方法不太好,我希望重写,但一个类中不只有一个类,还有大量的其他的方法,这些⽅法我觉得都很好,所以我想既要留着其他的方法供我使用,我还想重写youqian这个方法。*///子类继承父类以后,父类的方法可直接使用。$erzi = new Aa();//如果重名,会直接输出子类的方法,这在PHP面向对象中叫覆盖重写。$erzi->youQain();

不仅如此,继承以后,还可以在⼦类中继续新增方法,在原有的基础上,可以无限扩充你想要的功

能:

1 class A{ 2  public function youQian(){ 3  echo "有钱"; 4  } 5   6  public function benShi(){ 7  echo "不光有钱,本事才是最重要的"; 8  } 9 }10 //使用extends关键词继承。11 // class 子类(用户定义的) extends 父类(现有的类){}12 class Aa extends A{13  public function youQian(){14  echo "我比你更有钱";15  }16  17  public function genBenShi(){18  echo "我比老爷子更有本事";19  }20 }/*21 注意:虽然我们觉得A类中,youQian()这个⽅法不太好,我希望重写,但一个类中不只有一个22 类,还有大量的其他的方法,这些方法我觉得都很好,所以我想既要留着其他的方法供我使用,我23 还想重写youqian这个方法。24 */25 //子类继承父类以后,父类的方法可直接使用。26 $erzi = new Aa();27 //如果重名,会直接输出子类的方法,这在PHP面向对象中叫覆盖重写。28 $erzi->youQain();29 //调用自己写的方法30 $erzi->genBenshi();

继承的好处:

子类可以继承父类的属性及方法 , 并允许覆盖父类的方法或新增方法
通过自然界的比喻就是,通过"进化"来获得新特性,同时不影响旧物种。

注意:

PHP的继承是单继承。
一个子类只能继承一个父类。
但可以形成孙子继承。

1 

形成孙子继承:

1 
name; 7 } } //不仅仅是可以向下 也可以向上 8 class B extends A{ 9 // A 里面的sayA C里面的sayC 这两个方法都可以访问B类里面的受保护的属 protected $name ='满身大汉';10 } class C extends B{11 public function sayC(){12 echo $this->name;13 } } $p = new C;14 $p->sayC();15 $p->sayA();

不仅如此,PHP的继承还可以有多个儿子。

1 

 

转载于:https://www.cnblogs.com/zhony/p/10246408.html

你可能感兴趣的文章
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
查看>>
人类投资经理再也无法击败电脑的时代终将到来了...
查看>>
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>