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


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 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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中的array数组类型分析说明
2010/07/27 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python 命令行传入参数实现解析
2019/08/30 Python
python中count函数简单用法
2020/01/05 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
《最可爱的人》教学反思
2014/02/14 职场文书
教师听课评语大全
2014/12/31 职场文书
实习单位意见
2015/06/04 职场文书
奠基仪式致辞
2015/07/30 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书