php面向对象全攻略 (九)访问类型


Posted in PHP onSeptember 30, 2009

13.访问类型
类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5 的新特性,但却
是OOP 语言的一个好的特性。而且大多数OOP 语言都已支持此特性。PHP5 支持如下3 种访
问修饰符
public (公有的、默认的),private (私有的)和protected (受保护的)三种。
public 公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)
这个类成员(包括成员属性和成员方法),在PHP5 之前的所有版本中,PHP 中类的成员都是
public 的,而且在PHP5 中如果类的成员没有指定成员访问修饰符,将被视为public。
例:public $name;
public function say(){};
private 私有修改符,被定义为private 的成员,对于同一个类里的所有成员是可见的,即
是没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不
能访问private 修饰的成员。
例:private $var1 = ‘A'; //属性
private function getValue(){} //函数
protected 保护成员修饰符,被修饰为protected 的成员不能被该类的外部代码访问。但是
对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的
子类都不具有访问其属性和方法的权限。
例:protected $name;
protected function say(){};
private protected public
同一个类中 √ √ √
类的子类中 √ √
所有的外部成员 √
代码片段

<?php 
/** 
* Define MyClass 
*/ 
class MyClass{ 
public $public = 'Public'; 
protected $protected = 'Protected'; 
private $private = 'Private'; 
function printHello(){ 
echo $this->public; 
echo $this->protected; 
echo $this->private; 
} 
} 
$obj = new MyClass(); 
echo $obj->public; //Works 
echo $obj->protected; // Fatal Error 
echo $obj->private; // Fatal Error 
$obj->printHello(); // Shows Public, Protected and Private 
/** 
* Define MyClass2 
*/ 
class MyClass2 extends MyClass{ 
//We can redeclare the public and protected method, but not private 
protected $protected = 'Protected2'; 
function printHello(){ 
echo $this->public; 
echo $this->protected; 
echo $this->private; 
} 
} 
$obj2 = new MyClass2(); 
echo $obj->public; //Works 
echo $obj2->private; // Undefined 
echo $obj2->protected; // Fatal Error 
$obj2->printHello(); // Shows Public, Protected2, not Private 
?>

代码片段
<?php 
/** 
* Define MyClass 
*/ 
class MyClass{ 
// Contructors must be public 
public function __construct() { } 
// Declare a public method 
public function MyPublic() { } 
// Declare a protected method 
protected function MyProtected() { } 
// Declare a private method 
private function MyPrivate() { } 
// This is public 
function Foo() { 
$this->MyPublic(); 
$this->MyProtected(); 
$this->MyPrivate(); 
} 
} 
$myclass = new MyClass; 
$myclass->MyPublic(); //Works 
$myclass->MyProtected(); // Fatal Error 
$myclass->MyPrivate(); // Fatal Error 
$myclass->Foo(); // Public, Protected and Private work 
/** 
* Define MyClass2 
*/ 
class MyClass2 extends MyClass{ 
// This is public 
function Foo2(){ 
$this->MyPublic(); 
$this->MyProtected(); 
$this->MyPrivate(); // Fatal Error 
} 
} 
$myclass2 = new MyClass2; 
$myclass2->MyPublic(); // Works 
$myclass2->Foo2(); // Public and Protected work, not Private 
?>

另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类
被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
例如,如果父类方法的访问权限是protected 那么子类中要覆盖的权限就要是protected
和public,如果父类的方法是public 那么子类中要覆盖的方法只能也是public,总之子类中的
方法总是要高于或等于父类被覆盖方法的访问权限。
PHP 相关文章推荐
编写自己的php扩展函数
Oct 09 PHP
hessian 在PHP中的使用介绍
Dec 13 PHP
洪恩在线成语词典小偷程序php版
Apr 20 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
php中stream(流)的用法
Mar 25 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
May 18 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 #PHP
php面向对象全攻略 (七) 继承性
Sep 30 #PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 #PHP
php面向对象全攻略 (五) 封装性
Sep 30 #PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 #PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 #PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 #PHP
You might like
关于Intype一些小问题的解决办法
2008/03/28 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
php批量上传的实现代码
2013/06/09 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
一文读懂Python 枚举
2020/08/25 Python
教师找工作推荐信
2013/11/23 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
工作失误检讨书
2015/01/26 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript