第六节 访问属性和方法 [6]


Posted in PHP onOctober 09, 2006

一个对象实例的属性是变量,就像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 file://动物
{
public $blood; file://热血or冷血属性
public $name;
public function __construct($blood, $name=NULL)
{
$this->blood = $blood;
if($name)
{
$this->name = $name;
}
}
}

class Mammal extends Animal file://哺乳动物
{
public $furColor; file://皮毛颜色
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程序实现支持页面后退的两种方法
Jun 30 PHP
PHP垃圾回收机制简单说明
Jul 22 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
第八节 访问方式 [8]
Oct 09 #PHP
第九节 绑定 [9]
Oct 09 #PHP
第十节 抽象方法和抽象类 [10]
Oct 09 #PHP
Extended CHM PHP 语法手册之 DIY
Oct 09 #PHP
使用PHP制作新闻系统的思路
Oct 09 #PHP
一个oracle+PHP的查询的例子
Oct 09 #PHP
为php4加入动态flash文件的生成的支持
Oct 09 #PHP
You might like
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php 函数中使用static的说明
2012/06/01 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
jQuery示例收集
2010/11/05 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
JavaScript中string对象
2015/06/12 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
使用Python实现简单的服务器功能
2017/08/25 Python
python生成excel的实例代码
2017/11/08 Python
python如何读写csv数据
2018/03/21 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
如何在django中添加日志功能
2020/02/06 Python
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
“学雷锋活动月”总结
2014/03/09 职场文书
二年级评语大全
2014/04/23 职场文书
毕业论文评语大全
2014/04/29 职场文书
关于保护环境的建议书
2014/05/13 职场文书
党支部书记岗位职责
2015/02/15 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP