`
happmaoo
  • 浏览: 4472616 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在php中的变量和函数名前加&符号的意思

阅读更多

在php中的变量和函数名前加&符号的意思:
在PHP中&符号即传的是变量的引用而不是拷贝,引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,它们是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身 - 变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的紧密连接。
PHP 的引用允许你用两个变量来指向同一个内容。意思是,当你这样做时:
<?php
$a =&$b
?>
这意味着 $a 和 $b 指向了同一个变量。
注: $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。
同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中(PHP 4.0.4 以及以后版本):
<?php
$bar =& new fooclass();
$foo =& find_var ($bar);
?>
注: 不用 & 运算符导致对象生成了一个拷贝。如果你在类中用 $this,它将作用于该类当前的实例。没有用 & 的赋值将拷贝这个实例(例如对象)并且 $this 将作用于这个拷贝上,这并不总是想要的结果。由于性能和内存消耗的问题,通常你只想工作在一个实例上面。
尽管你可以用 @ 运算符来关闭构造函数中的任何错误信息,例如用 @new,但用 &new 语句时这不起效果。这是 Zend 引擎的一个限制并且会导致一个解析错误。
引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量并且该变量在呼叫范围内引用了同一个内容来实现的。例如:
<?php
function foo (&$var) {
$var++;
}
$a=5;
foo ($a);
?>
将使 $a 变成 6。这是因为在 foo 函数中变量 $var 指向了和 $a 指向的同一个内容。更多详细解释见引用传递。
引用做的第三件事是引用返回。
引用不是什么
如前所述,引用不是指针。这意味着下面的结构不会产生你预期的效果:
<?php
function foo (&$var){
$var =& $GLOBALS["baz"];
}
foo($bar);
?>
这将使 foo 函数中的 $var 变量在函数调用时和 $bar 绑定在一起,但接着又被重新绑定到了 $GLOBALS["baz"] 上面。不可能通过引用机制将 $bar 在函数调用范围内绑定到别的变量上面,因为在函数 foo 中并没有变量 $bar(它被表示为 $var,但是 $var 只有变量内容而没有调用符号表中的名字到值的绑定)。
引用传递
你可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。语法如下:
<?php
function foo (&$var) {
$var++;
}
$a=5;
foo ($a);
// $a is 6 here
?>
注意在函数调用时没有引用符号 - 只有函数定义中有。光是函数定义就足够使参数通过引用来正确传递了。
以下内容可以通过引用传递:
变量,例如 foo($a)
New 语句,例如 foo(new foobar())
从函数中返回的引用,例如:
<?php
function &bar() {
$a = 5;
return $a;
}
foo(bar());
?>
详细解释见引用返回。
任何其它表达式都不能通过引用传递,结果未定义。例如下面引用传递的例子是无效的:
<?php
function bar(){ // Note the missing &
$a = 5;
return $a;
}
foo(bar());
foo($a = 5) // 表达式,不是变量
foo(5) // 常量,不是变量
?>
这些条件是 PHP 4.0.4 以及以后版本有的。
引用返回
引用返回用在当你想用函数找到引用应该被绑定在哪一个变量上面时。当返回引用时,使用此语法:
<?php
function &find_var ($param){
/* ...code... */
return $found_var;
}
$foo =& find_var ($bar);
$foo->x = 2;
?>
本例中 find_var 函数所返回的对象的属性将被设定(译者:指的是 $foo->x = 2; 语句),而不是拷贝,就和没有用引用语法一样。
注: 和参数传递不同,这里必须在两个地方都用 & 符号 - 来指出返回的是一个引用,而不是通常的一个拷贝,同样也指出 $foo 是作为引用的绑定,而不是通常的赋值。
取消引用
当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如:
<?php
$a = 1;
$b =& $a;
unset ($a);
?>
不会 unset $b,只是 $a。
再拿这个和 Unix 的 unlink 调用来类比一下可能有助于理解。
引用定位
许多 PHP 的语法结构是通过引用机制实现的,所以上述有关引用绑定的一切也都适用于这些结构。一些结构,例如引用传递和返回,已经在上面提到了。其它使用引用的结构有:
global 引用
当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是说和这样做是相同的:
<?php
$var =& $GLOBALS["var"];
?>
这意味着,例如,unset $var 不会 unset 全局变量。
$this
在一个对象的方法中,$this 永远是调用它的对象的引用。

下面是测试的例子

分享到:
评论

相关推荐

    PHP函数 -函数的高级用法.ppt

    此处需注意,在调用函数时,引用函数返回值需要在函数名前添加&符号,用来说明返回的是一个引用。 三、函数的嵌套调用 PHP语言允许在函数定义中出现函数调用,从而形成函数的嵌套调用。 四、函数的递归调用 在函数的...

    php中函数前加&符号的作用分解

    首先,需要明确的是,在PHP中变量是可以使用引用符号&来获取它的引用,而不是它的值。举个例子,如果有两个变量$a和$b,当执行$a=&$b时,$a和$b指向了同一个数据地址,对$a的任何修改都会反映在$b上,反之亦然。这是...

    php中的注释、变量、数组、常量、函数应用介绍

    在PHP中,函数以"function"关键字开始,函数名后跟一对圆括号(),括号内部可以声明参数。函数定义完成后可以在代码的其他位置通过调用函数名来执行它。PHP有大量内置函数,同时也支持用户自定义函数。在调用函数时,...

    php的变量应用

    PHP变量的声明非常简单,不需要提前声明变量类型,只需要在变量名前加上"$"符号即可。例如: ```php $name = "John Doe"; $age = 30; ``` 上述代码中,`$name` 和 `$age` 分别被赋值为字符串和整型数据。PHP会根据...

    PHP经典实例--变量

    在深入探讨PHP变量的特性和使用时,我们可以从以下几个关键点来理解: 1. **声明与赋值**:在PHP中,无需预先声明变量类型,可以直接赋值创建变量。例如,`$var = "Hello, World!";` 这行代码就创建了一个字符串...

    去来php教程之变量也运算符

    在学习PHP变量和运算符的过程中,USR组织提供的资源和平台可以为学习者提供实践机会和互助环境,帮助他们更好地掌握这一重要技能。通过USR的社区论坛,学习者可以直接向经验丰富的成员提问,解决在编程过程中遇到的...

    PHP第三节变量介绍_.docx

    引用赋值通过在变量前加上&符号实现,但只能对已命名的变量进行引用赋值,不能对表达式进行引用。 虽然PHP不需要显式初始化变量,但建议对变量进行初始化。未初始化的变量会有其类型的默认值,如布尔类型默认为...

    PHP变量放在大括号里面的含义2

    在PHP中,可以通过在变量名前加上两个美元符号(`$$`)实现这一点。例如: ```php $action = 'login'; $child = 'check'; switch ($${$action} . '_' . ${$child}) { // 处理逻辑 } ``` 在这个例子中,`${$...

    第3章PHP中的常量与变量

    在PHP中,引用外部文件通常使用`include`和`require`这两个函数。`include`在执行到语句时引入文件,而`require`则在程序开始运行时就引入,确保文件始终可用。这对于包含全局函数和配置信息非常有用。 接下来,...

    PHP变量和常量的作用003

    在PHP中,不需要预先声明变量,可以直接使用`$`符号后跟变量名来创建变量。例如: ```php $myVariable = "Hello, World!"; ``` 2. **类型**:PHP是一种弱类型的语言,这意味着变量在赋值时自动确定其类型。它可以...

    php中引用&的用法分析【变量引用,函数引用,对象引用】

    php的引用(就是在变量或者函数、对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用 PHP 的引用...

    WEB开发 之 PHP 变量.docx

    在实际开发中,PHP变量可以用于各种用途,包括计算、存储用户输入、控制流程(通过条件语句和循环)、以及与其他PHP函数和库交互。例如,你可以将用户提交的表单数据赋值给变量,然后在后续的处理中使用这些值,或者...

    PHP的变量、常量学习笔记

    掌握PHP中的变量和常量是编程的基础,尤其理解引用变量、变量变量、全局与局部变量以及预定义常量的概念,对于编写高效、灵活的代码至关重要。通过本篇学习笔记,希望能帮助初学者深入理解并熟练运用PHP的变量和常量...

    php中引用符号(&)的使用详细介绍

    通过在变量名前加上符号&,就可以创建一个指向原始变量的引用。例如: ```php $a = "ABC"; $b = &$a; ``` 在这个例子中,`$a` 和 `$b` 都指向同一内容。因此,当我们修改 `$b` 的值时,`$a` 的值也会跟着改变。 `...

    PHP变量的定义及作用域

    2. **全局作用域(Global Scope)**:在函数外部定义的变量具有全局作用域,可以在整个脚本中访问,除非它们被包含在某个函数内部。 ```php $globalVar = "This is a global variable."; function myFunction() ...

    PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)

    在`Demo7.php`中,通过在参数前添加`&`符号,我们可以按引用传递变量。此时,函数内部对参数的修改会影响原始变量的值。 全局变量在PHP函数中的使用需要注意。如果在函数内部需要访问或修改全局变量,必须使用`...

    PHP编程基础--PHP变量.ppt

    在PHP中,变量的定义非常直观,由美元符号($)和随后的变量名组成,如`$myVariable`。需要注意的是,变量名是区分大小写的,所以`$myvariable`和`$MyVariable`是两个不同的变量。 变量的赋值是通过等号(=)操作符...

    深入分析PHP引用(&)

    在Unix系统中,文件名可以被视为目录条目,而文件本身则是文件内容,这可以用来形象地描述PHP中变量名和变量内容之间的关系。PHP中引用可以类比成Unix文件系统的硬链接。 在PHP中,当你通过引用声明变量时,你创建...

    【PHP程序设计】2、PHP常量与变量.pptx

    ... ... ... ... echo "这是XML标记风格";...- **脚本标记**: 类似于HTML中的`&lt;script&gt;`标签。...通过学习这些基础知识点,开发者能够更好地理解和掌握PHP变量与常量的使用技巧,为后续开发高质量的PHP应用程序打下坚实的基础。

    php中关于引用(&)详解.docx

    PHP中的引用可以通过在变量前加上`&`符号来创建。当我们使用引用时,实际上是创建了一个指向原始变量值的新变量名,而不是创建了一个新的变量。因此,对引用所做的任何修改都会直接影响到原变量。 **示例代码**: ...

Global site tag (gtag.js) - Google Analytics