第六节 访问属性和方法 [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环境搭建最新方法
Sep 05 PHP
php读取30天之内的根据算法排序的代码
Apr 06 PHP
php读取数据库信息的几种方法
May 24 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
php生成xml时添加CDATA标签的方法
Oct 17 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
php常用数组函数实例小结
Dec 29 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 PHP
php中关于换行的实例写法
Sep 26 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
详解python3实现的web端json通信协议
2016/12/29 Python
python 连接sqlite及简单操作
2017/06/30 Python
python使用epoll实现服务端的方法
2018/10/16 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python 类之间的参数传递方式
2019/12/20 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Python多线程的退出控制实现
2020/08/10 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
快递业务员岗位职责
2014/01/06 职场文书
岗位聘任书范文
2014/03/29 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
上帝也疯狂观后感
2015/06/09 职场文书