关于类一个很奇怪的小问题~ 请各位帮忙解决~~~ 嗯,上面的第一种情况的确报错: Call to a member function on a non-object 真的无法解释...我在www.php.net看到的都是采用数组的用法,但不知道在那里有解释 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看了PHP手册对引用的说明,有其中中一句:当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用,即:$var =& $GLOBALS["var"];根据这个解释,$var变量被绑定到了$GLOBALS["var"]上.而根据楼主第一个类的定义,当调用global $g的时候,变量$g已经被绑定到了$GLOBALS["g"]上,然而紧接下来的这一句:$g = &$this ;变量$g又重新被绑定给了实例$o,但是注意,这时候$g已经与$GLOBALS["g"]失去了联系,他的作用范围已经被局限于test类的成员函数foo()内了,不再是一个全局变量,这就是与c++语言的区别.那么就可以说明:$o = new Test() ;$o -> foo() ;$g -> foo() ;最后调用的那一句,$g等于是一个新的变量,解释器无法判断他的类型.再看第二个类:$g[] = &$this;这一句并没有解除$g与$GLOBALS["g"]的绑定,他只是给全局数组$GLOBALS["g"]添加了一个单元$GLOBALS["g"][0],并把这个新单元与实例$o进行绑定.所以:$o = new Test() ;$o -> foo() ;$g[0] -> foo() ;最后一句还可以通过全局变量$GLOBALS["g"]进行调用.不知道解释得对不对.大家讨论一下 to songsong2008我的c可能学得不好,但是你也不用带这种污辱性的语气吧,大家都是来讨论问题的,没有必要进行这样的攻击吧.如果您觉得有错,请您解释一下错在哪?既然都来参加讨论了,不要丢下一句错了就走吧?我所说的与c++的区别是指在对全局变量的使用上不同,你觉得这个有错么? magicsnake(北极狐) 的解释是正确的如果你把代码写成<?phpclass Test{ var $val = "123" ; function foo() {// global $g ;// $g = &$this ;$GLOBALS['g'] =& $this; echo $this->val ; }}$o = new Test() ;$o -> foo() ;$g -> foo() ;?>就可以正确运行了 谢谢各位!songsong2008() >> 恶心~~~~~ 各位PHP高手麻烦看下这段话哪有问题 关于wampserver安装和配置的问题~ 如何查找当前的网段? 让它不受图片容量大小的限制都能正常显示 怎样实现自动生成静态页面 问一个关于DISCUZ的及其简单的问题:) php 数组字符,转换数组 PHP 连接MYSQL出现问题 新手求教--在php中带数据库的web网站,对也管理员,和普通用户的权限控制 使用copy不能正确上传文件? 高分求一个分页函数或类,象google上的那种 请问如何避免别人用自己的程序在本机上传文件?
当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用,即:
$var =& $GLOBALS["var"];
根据这个解释,$var变量被绑定到了$GLOBALS["var"]上.
而根据楼主第一个类的定义,当调用
global $g
的时候,变量$g已经被绑定到了$GLOBALS["g"]上,然而紧接下来的这一句:
$g = &$this ;
变量$g又重新被绑定给了实例$o,但是注意,这时候$g已经与$GLOBALS["g"]失去了联系,他的作用范围已经被局限于test类的成员函数foo()内了,不再是一个全局变量,这就是与c++语言的区别.那么就可以说明:
$o = new Test() ;
$o -> foo() ;
$g -> foo() ;
最后调用的那一句,$g等于是一个新的变量,解释器无法判断他的类型.再看第二个类:
$g[] = &$this;
这一句并没有解除$g与$GLOBALS["g"]的绑定,他只是给全局数组$GLOBALS["g"]添加了一个单元$GLOBALS["g"][0],并把这个新单元与实例$o进行绑定.所以:
$o = new Test() ;
$o -> foo() ;
$g[0] -> foo() ;
最后一句还可以通过全局变量$GLOBALS["g"]进行调用.
不知道解释得对不对.大家讨论一下
我的c可能学得不好,但是你也不用带这种污辱性的语气吧,大家都是来讨论问题的,没有必要进行这样的攻击吧.如果您觉得有错,请您解释一下错在哪?既然都来参加讨论了,不要丢下一句错了就走吧?我所说的与c++的区别是指在对全局变量的使用上不同,你觉得这个有错么?
如果你把代码写成
<?php
class Test
{
var $val = "123" ;
function foo()
{
// global $g ;
// $g = &$this ;
$GLOBALS['g'] =& $this;
echo $this->val ;
}
}
$o = new Test() ;
$o -> foo() ;
$g -> foo() ;
?>
就可以正确运行了