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


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 simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
php获取服务器信息的实现代码
Feb 04 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
PHP 解决session死锁的方法
Jun 20 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
vue实现登录功能
2020/12/31 Vue.js
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Django保护敏感信息的方法示例
2019/05/09 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
python实现批量转换图片为黑白
2020/06/16 Python
学python最电脑配置有要求么
2020/07/05 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
小学生防溺水广播稿
2014/01/12 职场文书
幼儿园小班评语
2014/04/18 职场文书
产品发布会策划方案
2014/05/12 职场文书
大学生安全责任书
2014/07/25 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
倡议书怎么写?
2019/04/11 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
SQL写法--行行比较
2021/08/23 SQL Server
Oracle 死锁的检测查询及处理
2021/09/25 Oracle