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中对用户身份认证实现两种方法
Jun 04 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
php中get_magic_quotes_gpc()函数说明
Feb 06 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
JS伪继承prototype实现方法示例
2018/06/20 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Python实现代码统计工具
2019/09/19 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
大学生的创业计划书就该这么写
2014/01/30 职场文书
爱国教育主题班会
2015/08/14 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis