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


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 多行多列显示
Aug 15 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
php workerman定时任务的实现代码
Dec 23 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
laravel 5.5 关闭token的3种实现方式
Oct 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
PHP 图片文件上传实现代码
2010/12/29 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
解读ES6中class关键字
2017/11/20 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
vue filters的使用详解
2018/06/11 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
PyQt5组件读取参数的实例
2019/06/25 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python list运算操作代码实例解析
2020/01/20 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
浙江文明网签名寄语
2014/01/18 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
行政介绍信范文
2015/05/04 职场文书
数学备课组工作总结
2015/08/12 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS