第六节 访问属性和方法 [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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
PHP缓存技术的多种方法小结
Aug 14 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
destoon复制新模块的方法
Jun 21 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
PHP里的单例类写法实例
Jun 25 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
PHP在线打包下载功能示例
Oct 15 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 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
在html文件中也可以执行php语句的方法
2015/04/09 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
python实现简单中文词频统计示例
2017/11/08 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
pycharm导入源码的具体步骤
2020/08/04 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
企业宣传策划方案
2014/05/29 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2015年技术员工作总结
2015/04/10 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
python实现层次聚类的方法
2021/11/01 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python