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读取MySQL数据代码
Jun 05 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
利用PHP实现开心消消乐的算法示例
Oct 12 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
php源码的安装方法和实例
Sep 26 PHP
PHP dirname(__FILE__)原理及用法解析
Oct 28 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
PHP微信红包生成代码分享
2016/10/06 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python操作mysql代码总结
2018/06/01 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
问卷调查计划书
2014/01/10 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
继续教育个人总结
2015/03/03 职场文书
小学六一主持词开场白
2015/05/28 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers