php引用传值实例详解学习
在PHP中,引用赋值是一种非常实用的功能,它允许我们操作同一个变量内容的不同名字。通过简单地在一个变量名前加上'&',就可以创建引用。让我们深入理解这个概念并看一些实例。
一、什么是引用?
在PHP中,引用意味着用不同的名字访问同一个变量内容。这与C语言中的指针不同,而是更像符号表的别名。请注意,变量名和变量内容是分开的,相同的内容可以有不同的名字。最接近的比喻是Unix的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是Unix文件系统中的硬链接。
二、变量的引用
让我们通过代码理解这一概念:
```php
$a = 100;
$b = &$a; // $b是$a的引用
echo $b; // 输出100,说明$a和$b的值都是一百。
$b = 200; // 改变$b的值
echo $a; // 输出200,因为$a和$b引用的是同一个值。
```
三、函数中的引用传值
在函数中,我们可以通过传递变量的引用,使函数能够修改外部变量的值。例如:
```php
function main($a, &$b) { // $b通过引用传递
$b = $a + 100; // 修改外部变量$b的值
}
main(55, $b); // 这里的$b其实是把其内存地址传递给函数main中的$b参数。
echo $b; // 输出155,因为函数main改变了外部变量$b的值。
```
需要注意的是,当你unset一个引用时,只是断开了变量名和变量内容之间的绑定,变量内容本身并不会被销毁。
四、对象的引用传值
对于对象来说,引用赋值也是适用的:
```php
class Club { var $name = "Real Madrid"; }
$b = new Club; // 创建Club对象实例$b
$c = $b; // $c是对$b的对象的引用赋值
echo $b->name; // 输出Real Madrid
echo $c->name; // 输出Real Madrid,因为$c是$b的引用
$b->name = "Ronaldo"; // 修改对象的属性值通过任一引用变量都会生效
echo $c->name; // 输出Ronaldo,因为通过任一引用修改都会影响到实际的对象内容。 取消引用当你 unset 一个引用时只是断开了变量名和变量内容之间的绑定但这并不意味着变量内容被销毁了例如:unset($a);在这种情况下不会 unset $b只是断开了 $a与原有变量内容的绑定关系而已。使用对象引用传递时也要注意在函数中传递对象的属性时必须使用引用传递以确保修改对象属性的效果在函数外部也能生效例如:function foo(&$obj){ $obj->property = 'new value'; }传递对象时必须使用new stdClass()或已存在的对象实例并加上&符号进行引用传递以确保修改对象属性的效果在函数外部也能生效。另外需要注意的是在使用call_user_func_array函数时若需要传递引用则必须在参数前加上&符号以确保传递的是变量的实际地址而不是变量的拷贝。最后关于返回引用在PHP中不应为了性能原因返回引用除非有合理的技术原因才返回引用因为PHP引擎足够智能来自动优化这一点。PHP中的函数引用与数组引用:深入理解与实际应用
PHP中的函数引用返回和数组引用是两个重要的概念,它们能够帮助我们更深入地理解PHP的工作机制。让我们通过具体的例子来这两个概念。
一、函数引用返回
在PHP中,通过`$a=&test();`的方式,我们可以得到函数的引用返回。这是当你想用函数找到引用应该被绑定在哪一个变量上面时的一种手段。让我们看一个简单的例子来解释这个机制。
```php
function test() {
static $b=0; //申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}
$a=test(); //这条语句会输出 $b 的值为 1
$a=5; //改变 $a 的值不会影响函数中的 $b
$a=test(); //这条语句会输出 $b 的值为 2
$a=&test(); //这条语句会将 $b 的内存地址与 $a 的内存地址指向同一个地方
$a=5; //改变 $a 的值,也改变了 $b 的值
$a=test(); //这条语句会输出 $b 的值为 6
```
在这个例子中,第一次和第二次调用`test()`函数,都是普通的函数调用,函数的返回值(即$b的值)被赋给了$a。但是当我们使用`$a=&test();`时,我们实际上是将函数的返回值(即$b)和$a做了一个链接,它们指向的是同一块内存地址。当我们改变$a的值时,也间接地改变了函数内部$b的值。
二、数组引用
在PHP中,数组引用也是一个重要的概念。让我们看一个例子:
```php
$a = array('abe','ben','cam');
foreach ($a as $k=&$n)
$n = strtoupper($n);
foreach ($a as $k=>$n) // notice NO reference here!
echo "$n";
print_r($a);
```
在这个例子中,第一次foreach循环使用了引用赋值`&$n`,这意味着在循环中,`$n`是数组`$a`中每个元素的引用。当我们对`$n`进行修改时,实际上是对数组`$a`中的元素进行修改。在第二次foreach循环中,我们只是简单地遍历并打印数组的元素,由于第一次循环中已经修改了数组的元素,所以打印出来的结果也相应改变了。
PHP中的函数引用返回和数组引用都是非常重要的概念,它们能够帮助我们更深入地理解PHP的工作机制,也能在实际编程中提供很大的便利。
编程语言
- php引用传值实例详解学习
- ASP+JS三级联动下拉菜单[调用数据库数据]
- JS变量中有var定义和无var定义的区别以及es6中le
- jQuery实现仿QQ在线客服效果的滚动层代码
- PHP验证码类文件及调用方式代码详解
- php实现文本数据导入SQL SERVER
- 原生js实现自由拖拽弹窗代码demo
- XAML- 自定义控件中事件处理的最佳实践方法
- 理解php依赖注入和控制反转
- 15个jquery常用方法、小技巧分享
- Git常用场景使用方法
- 详谈Angular 2+ 的表单(一)之模板驱动型表单
- .Net中的集合排序可以这么玩你知道吗
- tsys _rss程序
- PHP的关于变量和日期处理的一些面试题目整理
- 使用 ServiceStack.Text 序列化 json的实现代码