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编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 PHP
php+laravel依赖注入知识点总结
Nov 04 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调用MySQL的存储过程的实现代码
2008/08/12 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
JS Timing
2007/04/21 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python内存管理分析
2015/04/08 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
Python sep参数使用方法详解
2020/02/12 Python
python 实现aes256加密
2020/11/27 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
2014年大学生工作总结
2014/11/20 职场文书
离婚协议书怎么写
2015/01/26 职场文书
司机岗位职责
2015/02/04 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis