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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP 字符串分割和比较
Oct 06 PHP
php利用cookie实现访问次数统计代码
May 19 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
PHP pear安装配置教程
May 14 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 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 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
python 统计代码行数简单实例
2017/05/04 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python 编程速成(推荐)
2019/04/15 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python中的列表与元组的使用
2019/08/08 Python
python hashlib加密实现代码
2019/10/17 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
500行python代码实现飞机大战
2020/04/24 Python
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
什么是封装
2013/03/26 面试题
助人为乐表扬信范文
2014/01/14 职场文书
志愿者活动总结
2014/04/28 职场文书
生日宴会策划方案
2014/06/03 职场文书
幸福家庭标语
2014/06/27 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android