无图版
|
左右分栏
» 您尚未
登录
注册
|
搜索
|
朋友圈
|
帮助
社区服务
银行
朋友圈
搜索工具
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训
»
入门和基础知识
»
Php4 的引用
交 易
投 票
本页主题:
Php4 的引用
打印
|
加为IE收藏
|
收藏主题
|
上一主题
|
下一主题
自由的龙
级别:
中级程序员
精华:
1
发帖:
1264
威望:
1267 点
金钱:
12660 PYMB
贡献值:
0 点
在线时间:0(小时)
注册时间:2006-04-16
最后登录:2006-06-27
Php4 的引用
因为工作上的限制,我还是在 PHP4 上举步不前。同样因为工作的需要,今天碰到对引用要求比较高的地方。需要验证的地方在于,如果在一个实例中引入一个值到属性,而这个值在过程中会同样引入到另外一个原型构建的对象中,那么,如果在另外一个对象中对相应属性进行更新,第一个实例的对应属性是否也会被更新?
为此,我尝试写了下面一段测试代码:
CODE:[Copy to clipboard]<?php
class x
{
var $a;
function & y ( $a = 0 )
{
$this->a = & $a;
return new y( $a );
}
}
class y
{
var $a;
function y ( & $a )
{
$this->a = & $a;
}
function z ( $a = 0 )
{
$this->a = & $a;
}
}
$x = new x;
$y = & $x->y( 1223 );
$y->z( 2334 );
var_export( $x );
?>
毫无疑问,因为仓促和考虑的疏忽,这个例子根本不能体现想法出来,结果失败是毫无疑问的。但错误的原因究竟是出在哪儿?在这个例子中,x:a 与 y:a 是通过 y::y() 方法中的参数引用而建立确切关联的。
难道说引用仅仅是单方向的?为此我写了下面一个测试,结果证实,引用正如手册中所说的,是两个变量名称指向同一个变量实体,变更一个,另外一个的表现也会随之而变更。
CODE:[Copy to clipboard]<?php
$x = 1;
$y = & $x;
$y = 2;
var_export( $x );
?>
回头仔细检查第一个测试脚本的代码,最后找到导致错误的地方在于 y::z() 方法中对 y:a 赋值的这一行语句:
CODE:[Copy to clipboard]<?php
$this->a = & $a;
?>
这样的操作意味着解除原有的引用关系,改引用到新的 $a 变量上。这样导致 x::$a 和 y::$a 的同步失败。而 x::y() 方法中的相同语句无误的原因则在于两者是通过 $a 来确定引用同步关系,哪怕此 $a 在生存周期——方法过程完结后空间被系统回收,x::$a 与 y::$a 的关系仍旧保持引用。
如果在定义 x::y() 方法时不对 $a 进行引用,就必须重新定义方法为:
CODE:[Copy to clipboard]<?php
function & y ( $a = 0 )
{
$this->a = $a;
return new y( $this->a );
}
?>
小小体会,记录下来与大家共享之。
Posted: 2006-04-16 16:21 |
[楼 主]
快速跳至
>> php培训
|- 培训咨询和报名
>> 学员专区
|- 学员交流区
>> 开源项目
|- 项目开发
|- OSC技术交流
|- CMS开源项目研究
|- 下载
>> PHP和web开发
|- 入门和基础知识
|- PHP中高级
|- 网站SEO
|- PHP资源共享
|- YUI,ext JS
|- 数据库应用
|- 操作系统(Windows、Linux)
|- 英语学习
|- 数据结构和算法
|- web2.0
>> 信息发布
|- 招聘和求职
>> 娱乐论坛
|- BT软件&教程发布
|- BT影视&音乐
|- 娱乐乐园
>> PHP世纪
|- 站务管理
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训
»
入门和基础知识
今日推荐
隐藏
显示
关闭
时:01-08 21:21
Copyright © 2006 phpwhy.com 权
ICP05060669
-
系