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调用c接口无错版介绍
Mar 11 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
php用户登录之cookie信息安全分析
May 13 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
php排序算法实例分析
Oct 17 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
PHP批量删除jQuery操作
Jul 23 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 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
php4的session功能评述(三)
2006/10/09 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
python监控键盘输入实例代码
2018/02/09 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
一看就懂得Python的math模块
2018/10/21 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
党章学习思想汇报
2014/01/14 职场文书
学生出入校管理制度
2014/01/16 职场文书
美术毕业生求职信
2014/02/25 职场文书
社区义诊活动总结
2014/04/30 职场文书
应届生找工作求职信
2014/06/24 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
高中教师个人总结
2015/02/10 职场文书
运动会100米广播稿
2015/08/19 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
Java无向树分析 实现最小高度树
2022/04/09 Javascript
Spring Boot实现文件上传下载
2022/08/14 Java/Android