PHP类的封装与继承详解


Posted in PHP onSeptember 29, 2015

封装

       把成员方法和成员属性封装到类中,隐藏属性和方法实现的细节,通过public、protected、private等限定类成员的访问权限,数据被保护在内部,只通过被授权的成员方法才可以操作,尽可能的对成员进行封装。

public:方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
protected:本类和子类可以访问,外部对象不可以调用。
private:只能在本类访问,子类与外部对象都不可能调用。经过private标记的方法或者属性可以在继承类中重新定义,每一个类只能看到它自己定义的私有方法。

       这三个修饰符从作用范围上来讲应该像这样从大到小排序:public→protected→private之所以说是在作用范围上,是因为类把一些属性和方法进行了封装,这个封装就决定了数据的“可见性”,这样我们在类的外面不能够随意修改所定义的属性和方法而只能够进行调用,这就是封装的好处,同时也提高了安全性。
我们给出代码示例: 

class myClass{ 
  public $public="Public";    //public属性
  protected $protected="Protected"; //protected属性
  private $private="Private";   //private 属性
  function say_Hello() {    //public属性 
  //只是举例说明,自行添加内容
  } 
 
 $obj=new myClass(); 
 echo $obj->public; 
 //echo $obj->protected; 
 //echo $obj->private;

通过运行以上示例我们得到一个“Public”,但当你把//echo $obj->private;的注释去掉时,你会得到一下如下的错误:

Fatal error: Cannot access protected property myClass::$protected in E:apachehtdocsexamplefile.php on line 13。

可以看到我们不能随意去访问类的属性定义,我们在“外面”是不知道这个类中到底有那些成员,因为这些成员对于其他的类可能是不可的。当然如果我们一定要访问或者修改定义为“私有”的属性时,也可以使用PHP所提供的系统方法:_get()和_set()。 

继承

       可以使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类。通过extends关键字实现继承关系。通俗来说,要有继承就得有一个“根源”,这“根源”你可能想像你以后生了儿子或者女儿,他们会从你这里得到一些“东西(属性和方法)”,这样你的“后代”就是持有你(根源)所有的一些特征了。

产生“根源”类(父类或者基类)
语法:class father{
}

产生“后代”(子类)
语法:class son extends father{
}

PHP extends类继承示例代码:

class father{ 
 protected $name; 
 function __construct($name){  //构造函数 
  $this->name=$name; 
 } 
 
 function work(){ 
  echo "{$this->name}我在工作;
 } 
 function __destruct(){}  //析构函数
} 
 
class son extends father{  //继承父类
 function play(){ 
  echo "{$this->name}我在玩游戏;
 }  
} 
 
 $my_father=new father(“爸爸”);  //创建父类对象
 $my_father->work(); 

 $my_son=new son(“儿子”); 
 $my_son->work(); 
 $my_son->play();

解析:在父类father里,我们定义了一般的属性和方法,然后定义子类。你可能发现在子类里内是没有构造函数和析构函数的,因为子类是继承了父类的所有方法,所以可以调用$my_son->work(); 这就是PHP类的继承了。另外要注意:PHP不能多层继承,如:class A extends B extends C,这样的继承在PHP中是无效的,PHP里只有单继承,不能多继承,需要其他办法变相“实现”多继承。

以上就是关于PHP类的封装与继承学习内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
PHP中的类型约束介绍
May 11 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
PHP比较运算符的详细介绍
Sep 29 #PHP
php提高网站效率的技巧
Sep 29 #PHP
四个PHP非常实用的功能
Sep 29 #PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 #PHP
PHP+AJAX实现投票功能的方法
Sep 28 #PHP
WIFI万能钥匙密码查询接口实例
Sep 28 #PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 #PHP
You might like
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
浅谈flask中的before_request与after_request
2018/01/20 Python
Python subprocess模块详细解读
2018/01/29 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
Python 统计字数的思路详解
2018/05/08 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Flask-WTF表单的使用方法
2019/07/12 Python
python数据抓取3种方法总结
2021/02/07 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2015年安全月活动总结
2015/03/26 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
Python入门之基础语法详解
2021/05/11 Python