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 相关文章推荐
ie6 动态缩略图不显示的原因
Jun 21 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
php获取301跳转URL简单实例
Dec 16 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
js简易版购物车功能
2017/06/17 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
了解JavaScript函数中的默认参数
2019/05/30 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
python的常见命令注入威胁
2013/02/18 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
Python使用type动态创建类操作示例
2020/02/29 Python
python实现电子词典
2020/03/03 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
家长会演讲稿范文
2014/01/10 职场文书
2014年计生标语
2014/06/23 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
基于Python实现股票收益率分析
2022/04/02 Python