详细解读PHP类的封装 (转)

PHP类的封装对于初学者来说是比较难懂的,在我们学习这方面的知识之前,首先要讲到的是PHP中的public、protected与private修饰符,可能在之前的代码中你已经见识过public这个修饰符,但是我们还并不懂这其中的奥秘,在接下来让我们看看吧。

public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。

protected:方法或者属性只能从类或者继承类的一个成员中访问到。

private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。经过private标记的方法或者属性可以在继承类中重新定义。每一个类只能看到它自己定义的私有方法。

这三个修饰符从作用范围上来讲应该像这样从大到小排序:

public→protected→private之所以说是在作用范围上是因为类跟我们之前的函数一样,把一些属性和方法进行了PHP类的封装。这个封装就决定了数据的“可见性”了,这样我们在类的外面不能够随意修改所定义的属性和方法而只能够进行调用,这就是封装的好处,同时也提高了安全性。为了说明这几个修饰符的作用,请看如下代码:

  1. < ?php
  2. class myClass{
  3. public $public="Public";
  4. protected $protected="Protected";
  5. private $private="Private";
  6. function say_Hello(){
  7. //我现在什么也不做,等下再告诉你
  8. }
  9. }
  10. $obj=new myClass();
  11. echo $obj->public;
  12. //echo $obj->protected;
  13. //echo $obj->private;
  14. ?>
  15. < ?php
  16. class myClass{
  17. public $public="Public";
  18. protected $protected="Protected";
  19. private $private="Private";
  20. function say_Hello(){
  21. //我现在什么也不做,等下再告诉你
  22. }
  23. }
  24. $obj=new myClass();
  25. echo $obj->public;
  26. //echo $obj->protected;
  27. //echo $obj->private;
  28. ?>

通过运行以上示例我们得到一个“Public”,但当你把//echo $obj->private;的注释去掉时,你会得到一下如下的错误:Fatal error: Cannot access protected property myClass::$protected in E:\apache\htdocs\example\file.php on line 13。

可以看到我们不能随意去访问类的属性定义,也就是我们不能去修改PHP类的封装中已经定义的一些操作,这就是可见性了。我们在“外面”是不知道这个类中到底有那些成员,因为这些成员对于其他的类可能是不可见的。

当然如果我们一定要访问或者修改定义为“私有”的属性时,也可以使用PHP所提供的系统方法:_get()和_set()。关于这个在以后再来了解,因为现在我对此也只是有个了解啦。

时间: 2024-10-09 20:55:22

详细解读PHP类的封装 (转)的相关文章

详细解读PHP类的封装

[导读] public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public.protected:方法或者属性只能从类或者继承类的一个成员中访问到.private:方法或者属 public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public. protected:方法或者属性只能从类或者继承类的一个成员中访问到. private:方法或者属性只能从类的一个成员中访问到,而且无

详细解读Volley(三)—— ImageLoader &amp; NetworkImageView

ImageLoader是一个加载网络图片的封装类,其内部还是由ImageRequest来实现的.但因为源码中没有提供磁盘缓存的设置,所以咱们还需要去源码中进行修改,让我们可以更加自如的设定是否进行磁盘缓存. 一.添加对磁盘缓存的控制 我们默默的打开源码,添加如下代码: private boolean mShouldCache = true; /** * Set whether or not responses to this request should be cached(Disk Cache

详细解读DialogFragment

详细解读DialogFragment 相信看这篇文章的人都应该知道android中的Dialog了吧,如果对于Dialog还不是很了解可以看我之前的一篇详解文章: Dialog详解:http://www.cnblogs.com/tianzhijiexian/p/3867731.html 随着Fragment这个类的引入,Google官方推荐大家使用DialogFragment来代替传统的Dialog,那么是不是说我们之前学习的Dialog知识都没有用处了呢?非也,新的fragment是来方便大家

Android BLE蓝牙详细解读

代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家具和玩具类产品.安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备.查询服务和读写特性.相比传统的蓝牙,BLE更显著的特点是低功耗.本文主要讲解Android低功耗蓝牙的api使用以及蓝牙扫描.连接.发送数据.接收数据等一系列操作,并主要介绍本人封装的Ble

为你详细解读HTTP请求头的具体含意

当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看某一次HTTP请求头的具体内容: Accept-Language: zh-cn,zh;q=0.5 Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Accept: text/html,application/xhtml+xml,application/xml;q=

项目中连接数据库,类的封装;

一.首先创建一个类,封装数据库和个人信息: package com.yxq.dao; public class Constants { public static String url ="jdbc:mysql://127.0.0.1:3306/personblog"; public static String className="com.mysql.jdbc.Driver"; public static String userName ="root&q

PHP中的符号 -&gt;、=&gt; 和 :: 以及PDO类的封装

下文链接:http://www.95px.com/program/95px_program_3118.shtml 没关系,下面我们做一下详细的解释,如果你有C++,Perl基础,你会发现这些家伙和他们里面的一些符号功能是差不多的. '- >'符号是"插入式解引用操作符"(infix dereference operator) 换句话说,它是调用由引用传递参数的子程序的方法(当然,还有其它的作用).正如我们上面所提到的,在调用PHP的函数的时候,大部分参数都是通过引用传递的.PHP

web.xml详细解读(flex项目,框架:cairngorm--blazeDS--spring--ibatis)(正在编写中)

<listener> <listener-class>flex.messaging.HttpFlexSession</listener-class> </listener> HttpFlexSession 是 BlazeDS 提供的一个 Listener,负责监听 Flex 远程调用请求,并进行一些初始化设置 <listener> <listener-class> org.springframework.web.util.Log4jC

转载 实现类的封装性

实现类的封装性 为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问.对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值.一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容.我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另