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 相关文章推荐
实用函数2
Nov 08 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
PHP调用Webservice实例代码
Jul 29 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
PHP+javascript制作带提示的验证码源码分享
May 28 PHP
ThinkPHP3.2.3数据库设置新特性
Mar 05 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
bootstrapvalidator之API学习教程
2017/06/29 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
社团活动总结怎么写
2014/06/30 职场文书
社区护士演讲稿
2014/08/27 职场文书
1000字打架检讨书
2014/11/03 职场文书
讲文明倡议书
2015/04/29 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
Python基础知识学习之类的继承
2021/05/31 Python