第八节 访问方式 [8]


Posted in PHP onOctober 09, 2006

PHP5的访问方式允许限制对类成员的访问. 这是在PHP5中新增的功能,但在许多面向对象语言中都早已存在. 有了访问方式,才能开发一个可靠的面向对象应用程序,并且构建可重用的面向对象类库.

像C++和Java一样,PHP有三种访问方式:public,private和protected. 对于一个类成员的访问方式,可以是其中之一. 如果你没有指明访问方式,默认地访问方式为public. 你也可以为静态成员指明一种访问方式,将访问方式放在static关键字之前(如public static).

Public成员可以被毫无限制地访问.类外部的任何代码都可以读写public属性. 你可以从脚本的任何地方调用一个public方法. 在PHP的前几个版本中,所有方法和属性都是public, 这让人觉得对象就像是结构精巧的数组.

Private(私有)成员只在类的内部可见. 你不能在一个private属性所在的类方法之外改变或读取它的值. 同样地,只有在同一个类中的方法可以调用一个private方法. 继承的子类也不能访问父类中的private 成员.

要注意,类中的任何成员和类的实例都可以访问private成员. 看例子6.8,equals方法将两个widget进行比较.==运算符比较同一个类的两个对象,但这个例子中每个对象实例都有唯一的ID.equals 方法只比较name和price. 注意equals方法如何访问另一个Widget实例的private属性. Java和C都允许这样的操作.

Listing 6.8 Private members
<?php
class Widget
{
private $name;
private $price;
private $id;

public function __construct($name, $price)
{
$this->name = $name;
$this->price = floatval($price);
$this->id = uniqid();
}
//checks if two widgets are the same 检查两个widget是否相同
public function equals($widget)
{
return(($this->name == $widget->name)AND
($this->price == $widget->price));
}

$w1 = new Widget('Cog', 5.00);
$w2 = new Widget('Cog', 5.00);
$w3 = new Widget('Gear', 7.00);

//TRUE
if($w1->equals($w2))
{
print("w1 and w2 are the same<br>n");
}

//FALSE
if($w1->equals($w3))
{
print("w1 and w3 are the same<br>n");
}

//FALSE, == includes id in comparison
if($w1 == $w2) file://不等,因为ID不同
{
print("w1 and w2 are the same<br>n");
}
?>  一个子类可能改变通过覆写父类方法来改变方法的访问方式,尽管如此,仍然有一些限制. 如果你覆写了一个public类成员,他子类中必须保持public. 如果你覆写了一个protected成员,它可保持protected或变成public.Private成员仍然只在当前类中可见. 声明一个与父类的private成员同名的成员将简单地在当前类中建立一个与原来不同的成员. 因此,在技术上你不能覆写一个private成员.

Final关键字是限制访问成员方法的另一个方法. 子类不能覆写父类中标识为final的方法. Final关键字不能用于属性. //haohappy注:PHP5的面向对象模型仍然不够完善,如final不像Java中那样对Data,Method甚至Class都可以用。

PHP 相关文章推荐
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP面向对象法则
Feb 23 PHP
smarty简单应用实例
Nov 03 PHP
PHP验证码生成原理和实现
Jan 24 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
PHP 类与构造函数解析
Feb 06 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 PHP
第九节 绑定 [9]
Oct 09 #PHP
第十节 抽象方法和抽象类 [10]
Oct 09 #PHP
Extended CHM PHP 语法手册之 DIY
Oct 09 #PHP
使用PHP制作新闻系统的思路
Oct 09 #PHP
一个oracle+PHP的查询的例子
Oct 09 #PHP
为php4加入动态flash文件的生成的支持
Oct 09 #PHP
用PHP编程语言开发动态WAP页面
Oct 09 #PHP
You might like
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python之web模板应用
2017/12/26 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python实现音乐下载的统计
2018/06/20 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
python后端接收前端回传的文件方法
2019/01/02 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
python3安装crypto出错及解决方法
2019/07/30 Python
python虚拟环境完美部署教程
2019/08/06 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
DBA的职责都有哪些
2012/05/16 面试题
学术诚信承诺书
2014/05/26 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书