PHP 5.0对象模型深度探索之属性和方法


Posted in PHP onMarch 27, 2008

可以联用->,如果一个对象的属性包含了一个对象,你可以使用两个->运算符来得到内部对象的属性. 你甚至可以用双重引用的字符串来放置这些表达式. 下面的例子中,对象House中的属性room包含了一组Room对象。

访问方法和访问属性类似。->运算符用来指向实例的方法. 在下面的中调用getLastLogin就是。方法执行起来和类外的函数几乎相同.

如果一个类从另一类中继承而来,父类中的属性和方法将在子类中都有效,即使在子类中没有声明. 像以前提到过的,继承是非常强大的. 如果你想访问一个继承的属性,你只需要像访问基类自己的属性那样引用即可,使用::运算符. 

<?php  
class Room   
{   
 public $name;   
 function __construct($name="unnamed")   
 {   

$this->name = $name;   
 }   
}   
class House   
{   
 //array of rooms   
 public $room;   
}   
//create empty house   
$home = new house;   
//add some rooms   
$home->room[] = new Room("bedroom");   
$home->room[] = new Room("kitchen");   
$home->room[] = new Room("bathroom");   
//show the first room of the house   
print($home->room[0]->name);   
?> 

PHP有两个特殊的命名空间:parent命名空间指向父类,self命名空间指向当前的类。下面的例子中显示了如何用parent命名空间来调用父类中的构造函数. 同时也用self来在构造函数中调用另一个类方法。
<?php  
class Animal //动物   
{   
 public $blood; //热血or冷血属性   
 public $name;   
 public function __construct($blood, $name=NULL)   
 {   

$this->blood = $blood;   

if($name)   

{   

 $this->name = $name;   

}   
 }   
}   
class Mammal extends Animal //哺乳动物   
{   
 public $furColor; //皮毛颜色   
 public $legs;   
 function __construct($furColor, $legs, $name=NULL)   
 {   

parent::__construct("warm", $name);   

$this->furColor = $furColor;   

$this->legs = $legs;   
 }   
}   
class Dog extends Mammal   
{   
 function __construct($furColor, $name)   
 {   

parent::__construct($furColor, 4, $name);   

self::bark();   
 }   
 function bark()   
 {   

print("$this->name says 'woof!'");   
 }   
}   
$d = new Dog("Black and Tan", "Angus");   
?>  

对于对象的成员来是这样调用的:如果你需要在运行时确定变量的名称,你可以用$this->$Property这样的表达式。 如果你想调用方法,可以用$obj->$method()。

你也可以用->运算符来返回一个函数的值,这在PHP以前的版本中是不允许的。例如,你可以写一个像这样的表达式: $obj->getObject()->callMethod()。这样避免了使用一个中间变量,也有助于实现某些设计模式,如Factory模式。

PHP 相关文章推荐
用PHP发电子邮件
Oct 09 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
PHP程序员编程注意事项
Apr 10 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
PHP在不同页面间传递Json数据示例代码
Jun 08 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 PHP
php优化查询foreach代码实例讲解
Mar 24 PHP
php简单静态页生成过程
Mar 27 #PHP
优化PHP代码的53条建议
Mar 27 #PHP
PHP连接access数据库
Mar 27 #PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 #PHP
php 无限极分类
Mar 27 #PHP
mysql时区问题
Mar 26 #PHP
How do I change MySQL timezone?
Mar 26 #PHP
You might like
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
js实现随机点名程序
2020/09/17 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
urllib2自定义opener详解
2014/02/07 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
Python之列表实现栈的工作功能
2019/01/28 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
Python自带的IDE在哪里
2020/07/01 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
python xlsxwriter模块的使用
2020/12/24 Python
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
民主评议党员自我鉴定
2014/10/21 职场文书
订货会邀请函
2015/01/31 职场文书
会计工作岗位职责
2015/02/03 职场文书
安全生产标语口号
2015/12/26 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电