&$var是什么意思?global是什么意思?

zlcqupt 2009-10-14 05:42:02
<?php
// 例子1
function test_global() {
global $var1, $var2; //???(第一问)这里的$var1是一个别名,还是一个地址,还是跟函数外面的全局的$var1完全一样?
$var2 = &$var1;
}
function test_globals() {
$GLOBALS['var3'] = &$GLOBALS['var1']; //???(第二问)$GLOBALS['var1']应该与函数外面的全局的$var1完全一样吧?
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 ."\\n"."<br />";
$var1 = 5;
$var2 = $var3 = 0;
$var3= &$var1;//???(第三问)变量前面加个&是什么意思;(第四问)这时$var3是个地址还是个别名?
//test_globals();
print $var3 ."\\n"."<br />";
exit;
?>

请老大们一个问题一个问题解答。谢谢
...全文
1467 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdlyczl 2009-10-15
  • 打赏
  • 举报
回复
php里,一个变量可以分成三个部分来理解,一个是变量的名字,一个是变量的值,一个是变量的地址。变量的名字指向变量的值,代码里看到名字,就是表示这个变量的值。变量的别名,是变量的另一

个名字。变量的地址,是变量的存储空间的地址,这个只是理解起来有用,而实际代码中不会出现,这一点与c语言不相同。
基于上面的原则,下面就容易理解了:

func($a, &$b){}
函数的形参,可以是一个变量的值,可以是一个变量的名字。函数形参如果是一个变量的值($a),形参就是实参的值的复制,函数内部如果修改了形参的值(比如$a=2;),不影响实参的值。而形参如果是

一个引用(&$b),那么形参的地址就是实参的地址的复制,函数内部,如果修改了这个形参的值,那么,会影响外面的实参的值。(当然,函数调用时,可能实参是一些常量,这时当然就是传值了。)。

如果修改这个形参为另一个变量的引用,那么这个形参的地址就变了,就不指向实参的值的存储空间了。而这时,对形参的值的改变就不会影响到实参的值。

引用(别名)与原变量是一样的,一个修改后,另一个也会修改。
如果在函数内部,使用global $var,那么如果函数内部把$var赋值为一个具体的常数或者一个变量,那么外部的$var会改变。而如果内部把$var赋值为一个变量的引用,那么外部$var的值不会改变。也

就是说,不能在函数内部把全局变量赋值为一个引用。
这是php手册的说明:如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。
可以这样理解,函数内部,global $var,这时,$var实质上是外部全局变量$var的一个别名,它们指向同一块内存。而函数内部对$var修改为另一个变量的引用,只是把这个别名变为另一个变量的别名

了,而没有修改外部全局变量。


一个变量,是一个名字,一个别名,也是一个名字。它们可能指向一个具体的值。
函数参数值递时,如果形参是一个变量不是一个别名,那么形参的值是实参的值的复制。如果是一个别名,那么形参的值是实参的名字的复制。而函数内部,对形参赋一个具体的常量或者一个变量(非

别名),是对形参指向的值的改变。对形参赋值一个别名,那么只是使这个形参指向另一个值就是了。而实参,也就是外面的变量的名字,仍然指向原来的值。也就是说,不会影响外面的实参的值。
unset($var)是对$var这个变量unset,所以如果是函数内部使用,对函数内部的global $var进行unset,不会影响外面的全局$var。
一个变量是另一个变量的别名,对其中一个变量unset不会影响另一个。

一点自己的想法,不过对楼主没用,一个人一个认识
fengyqf 2009-10-14
  • 打赏
  • 举报
回复
看php官方参考文档吧,有中文译本,什么东西都很清楚,查阅非常方便,CSDN资源下载里肯定也有
zlcqupt 2009-10-14
  • 打赏
  • 举报
回复
函数形参如果是一个变量,形参就是实参的值的复制,函数内部如果修改了形参,不影响实参的值。而形参如果是一个引用,函数内部如果修改了这个形参,那么,会影响外

面的实参的值。
引用(别名)与原变量是一样的,一个修改后,另一个也会修改。
如果在函数内部,使用global $var,那么如果函数内部把$var赋值为一个具体的常数或者一个变量,那么外部的$var会改变。而如果内部把$var赋值为一个变量的引用,那么

外部$var的值不会改变。也就是说,不能在函数内部把全局变量赋值为一个引用。

这是我自己总结的,请老大们指正。。
zlcqupt 2009-10-14
  • 打赏
  • 举报
回复
$var1=$var2
echo $var1
$var1=&$var2
echo $var1
发现结果是一样的
请问这两句有什么区别?
zlcqupt 2009-10-14
  • 打赏
  • 举报
回复
global 是在外部定义全局变量的:这句话说得不对吧,在函数内部,使用global是为了使用外部的全局变量。而外部变量默认就是全局变量,不用global也行。
kyzy_yy_pm 2009-10-14
  • 打赏
  • 举报
回复
global 是在外部定义全局变量的
$GLOBALS是在内部调用之前生命用的
&$var1是取变量的地址用的
dzxccsu 2009-10-14
  • 打赏
  • 举报
回复
1.global声明外部变量和外部变量一样
2.$GLOBALS 不定义变量,只是说明某变量是全局变量
3.是地址1
什么是TypeScript?TypeScript是JavaScript的加强版,它给JavaScript添加了可选的静态类型和基于类的面向对象编程,它拓展了JavaScript的语法。不过,你不必担心TypeScript跟浏览器不兼容,因为在编译时,它产生的都是JavaScript代码。为什么要学TypeScritpt?TypeScript是一门很有前景和钱景的语言;它能大幅的提高工作效率,并且减少错误;这堂课我们能学到什么?随着前端行业越来越受到重视,前端的逻辑也越来越复杂,对前端从业者的职业要求也越来越高,Vue、Angular、React和一些新的框架层出不穷,而作为Angular等框架的推荐语言TypeScript也在市场中得到了认可和追捧,不管是前端、还是游戏引擎、以及一些大型项目开发都中开始展露头角。但是这方面学习资源相对较少。课程特点:本堂课程通过深入浅出的讲解,幽默风趣的风格; 让大家在3个小时的课程中能够掌握大部分TypeScript的核心知识; 同时能够使用TypeScript进行React等框架的项目开发; 为大家的学习和在工作中使用TypeScript打下坚实的基础。课程大纲:1.TS的初步配置2.TS 数据类型 any 枚举3.函数的参数和返回值类型4.类非常重要 非常重要5.静态类属性和方法 Math6.泛型7.模块化 systemjs8.项目TS+react+webpack结合的工作流应类型管理 js->tsx 2.0如何用TS开发react->TSX(难点->官网 项目)工作流 package.json -> npm start npm run build 适用人群:1.Typescript零基础想掌握ts正确学习姿势和入门的初学者2.经验丰富的jser想拓宽自己知识掌握ES6和ES7新功能的从业者3.想在工作和项目中使用ts结合VAR框架的人员4.有志于成为全栈开发人员却苦于无法入门后端和跟后端沟通不畅的开发者5.想深入了解和使用angular的人员

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧