第六节--访问属性和方法


Posted in PHP onNovember 16, 2006

*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/

第六节--访问属性和方法

一个对象实例的属性是变量,就像PHP的其他变量一样. 但是你必须使用->运算符来引用它们. 不需要在属性前使用美元符$. 例如, 6.1中打印User对象的name属性那一行. 

可以联用->,如果一个对象的属性包含了一个对象,你可以使用两个->运算符来得到内部对象的属性. 你甚至可以用双重引用的字符串来放置这些表达式. 看6.5中的例子,对象House中的属性room包含了一组Room对象.

访问方法和访问属性类似. ->运算符用来指向实例的方法. 在例子6.1中调用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命名空间指向当前的类. 例子6.6中显示了如何用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 和 MySQL 基础教程(四)
Oct 09 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
php实现用于删除整个目录的递归函数
Mar 16 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
php递归函数怎么用才有效
Feb 24 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
php常用的工具开发整理
Sep 26 PHP
第五节--克隆
Nov 16 #PHP
第四节--构造函数和析构函数
Nov 16 #PHP
第三节--定义一个类
Nov 16 #PHP
第二节--PHP5 的对象模型
Nov 16 #PHP
第一节--面向对象编程
Nov 16 #PHP
MYSQL数据库初学者使用指南
Nov 16 #PHP
php.ini 中文版
Oct 28 #PHP
You might like
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php简单实现快速排序的方法
2015/04/04 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
Django Celery异步任务队列的实现
2019/07/24 Python
如何获取Python简单for循环索引
2019/11/21 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
消防安全员岗位职责
2014/03/10 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书