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 中dirname(_file_)讲解
Mar 18 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PDO::lastInsertId讲解
Jan 29 PHP
php无限级分类实现评论及回复功能
Feb 18 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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
大学生毕业的自我鉴定
2013/11/13 职场文书
学习自我鉴定
2014/02/01 职场文书
人代会标语
2014/06/30 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python