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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
谈谈PHP的输入输出流
Feb 14 PHP
让PHP支持断点续传的源码
May 16 PHP
php实现下载限制速度示例分享
Feb 13 PHP
10个简化PHP开发的工具
Dec 25 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
PHP函数超时处理方法
Feb 14 PHP
浅谈PHP安全防护之Web攻击
Jan 03 PHP
php实现微信支付之企业付款
May 30 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
图书管理程序(一)
2006/10/09 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP常用数组函数介绍
2014/07/28 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
浅谈Python中copy()方法的使用
2015/05/21 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python之循环结构
2019/01/15 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
python中安装django模块的方法
2020/03/12 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
中学自我评价
2014/01/31 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
汶川大地震感悟
2015/08/10 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
Nginx HTTP跳转至HTTPS
2022/05/15 Servers