变量相互赋值的问题-变量指向内存的问题 本帖最后由 generalxu 于 2010-10-27 15:28:23 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果用另一段更简单的类来验证: class Test_s { public $k=0; } $test_s1=new Test_s(); $test_s2=$test_s1; echo "test_s1:".$test_s1->k."<br />"; echo "test_s2:".$test_s2->k."<br />"; $test_s1->k++; echo "test_s1:".$test_s1->k."<br />"; echo "test_s2:".$test_s2->k."<br />";显示的是:test_s1:0test_s2:0test_s1:1test_s2:1还是说明两个变量指向同一内存的。 首先 是否指向同一内存 的说法是欠妥的php 与编译型的语言不一样,变量并不直接存放于内存中。而是存放在由php引擎维护的一张表中所以 php 就没有了操作内存的“指针”,而是功能相似的“引用”$b =& $a;就是引用,他表示 $b 和 $a 共用一个变量表项的数据区在 php5 以前,对象和普通变量没有区别而到了 php5 情况就有点变化了:所有对象都是以“引用”方式传递的class Test_s{ public $k=0;}function foo($o) { $o->k++;}$test_s1 = new Test_s();echo $test_s1->k , '<br />';//0foo($test_s1);echo $test_s1->k , '<br />';//1 这个是正确的http://docs.php.net/manual/zh/language.oop5.references.php在php中,引用只是一个别名,不是指针。new 对象时,自动返回引用。 PHP对象与变量处理方式是不同的。$b=$a;//$a=new Cls_1(); $b保存$a 的标号(以此来查找对象实际数据)的一个副本,指向同一处实际数据$b=&$a;//$a=new Cls_1(); $b为$a的一个引用,效果同上$b=$a;//$a=10; $b保存$a的一个副本,变量赋值后二者无关系$b=&$a;//$a=10; $b为$a的一个引用,二者指向同一处实际数据 无法实现翻页,求帮助 关于php中文正则的问题 字符串变数组问题 preg_split 多项 php5 + iis6 + mysql5.2 导致的在打开网页时,库中读取的汉字为乱码2?24???????????? 数据库可以更新字母和数字,但文字不能更新 北京地区招PHP人才 没有 licence 用 zendenc.exe 编译的文件是不是有使用期限亚? 高分:一个大难题(对于我来说) 灌水勿进 $_SERVER["SERVER_PORT"]获取端口的问题 如何用preg_match_all解析这段字符 php/关于rar文件的处理
{
public $k=0;
}
$test_s1=new Test_s();
$test_s2=$test_s1;
echo "test_s1:".$test_s1->k."<br />";
echo "test_s2:".$test_s2->k."<br />";
$test_s1->k++;
echo "test_s1:".$test_s1->k."<br />";
echo "test_s2:".$test_s2->k."<br />";显示的是:
test_s1:0
test_s2:0
test_s1:1
test_s2:1
还是说明两个变量指向同一内存的。
php 与编译型的语言不一样,变量并不直接存放于内存中。而是存放在由php引擎维护的一张表中所以 php 就没有了操作内存的“指针”,而是功能相似的“引用”
$b =& $a;
就是引用,他表示 $b 和 $a 共用一个变量表项的数据区在 php5 以前,对象和普通变量没有区别
而到了 php5 情况就有点变化了:所有对象都是以“引用”方式传递的
class Test_s
{
public $k=0;
}function foo($o) {
$o->k++;
}$test_s1 = new Test_s();
echo $test_s1->k , '<br />';//0foo($test_s1);
echo $test_s1->k , '<br />';//1
$b=&$a;//$a=new Cls_1(); $b为$a的一个引用,效果同上$b=$a;//$a=10; $b保存$a的一个副本,变量赋值后二者无关系
$b=&$a;//$a=10; $b为$a的一个引用,二者指向同一处实际数据