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实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
php中动态调用函数的方法
Mar 16 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 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
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
python调用shell的方法
2013/11/20 Python
python改变日志(logging)存放位置的示例
2014/03/27 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
2014年团委工作总结
2014/11/13 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
雷锋之歌观后感
2015/06/10 职场文书
个人催款函范文
2015/06/23 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
高二数学教学反思
2016/02/18 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
python三子棋游戏
2022/05/04 Python