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 采集程序 常用函数
Dec 18 PHP
php 分页类 扩展代码
Jun 11 PHP
有关PHP性能优化的介绍
Jun 20 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php实现Linux服务器木马排查及加固功能
Dec 29 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
php与阿里云短信接口接入操作案例分析
May 27 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
JS target与currentTarget区别说明
2011/08/28 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python的函数嵌套的使用方法
2014/01/24 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
优秀的2014年两会精神解读
2014/03/17 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
民政局个人整改措施
2014/09/24 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
初中政教处工作总结
2015/08/12 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技