原文出处:http://hi.baidu.com/kashifs/blog/item/928379f254888cbea50f524a.html
在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。
引用传递
function foo ( &$var )
{$var++;}
foo ($a); // 注意在函数调用时没有引用符号 - 只有函数定义中有。光是函数定义就足够使参数通过引用来正确传递了
引用返回
function &init_users()
{ ... return $cls;}
//使用引用返回,必须在两个地方都用&符号
$user = & init_users();
function &init_users()
{ ...return $cls;}
取消引用
当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。
$a="hihaha";
$b= &$a;
unset($b);
echo$a;// shows "hihaha"
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里有个php引用的例子,好好看一遍:
<?php
//if you do:
$a="hihaha";
$b= &$a;
$c="eita";
$b=$c;
echo$a;// shows "eita"
$a="hihaha";
$b= &$a;
$c="eita";
$b= &$c;
echo$a;// shows "hihaha"
$a="hihaha";
$b= &$a;
$b=null;
echo$a;// shows nothing (both are set to null)
$a="hihaha";
$b= &$a;
unset($b);
echo$a;// shows "hihaha"
$a="hihaha";
$b= &$a;
$c="eita";
$a=$c;
echo$b;// shows "eita"
$a="hihaha";
$b= &$a;
$c="eita";
$a= &$c;
echo$b;// shows "hihaha"
$a="hihaha";
$b= &$a;
$a=null;
echo$b;// shows nothing (both are set to null)
$a="hihaha";
$b= &$a;
unset($a);
echo$b;// shows "hihaha"
?>
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PHP unset全局变量在用户函数中只能销毁局部变量,并不能销毁全局变量。(从PHP4开始unset已经不再是一个函数了,而是一个语句)。如果需要销毁全局变量的应该如何做呢?也很简单,用$GLOBALS数组来实现。
< ?PHP
function foo() {
unset($GLOBALS['bar']); // 而不是unset($bar)
}
$bar = “something”;
foo();
var_dump($bar);
?>
对于unset:
1. 该函数只有在变量值所占空间超过256字节长的时候才会释放内存
2. 只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)
也就是检查有无其他变量绑定,有的话就不会释放了。就像这个例子:
$a="hihaha";
$b= &$a;
unset($b);
echo$a;// shows "hihaha"
所以建议大家用 $变量=null 的方法来释放其内存。
给一个测试当前php脚本内存使用情况的函数:
<?php
echo memory_get_usage()."\n";
$a = str_repeat("A", 1000);
echo memory_get_usage()."\n";
$b=&$a; //下面的内存大小不会变,unset只是解除$a的绑定
unset($a);
echo memory_get_usage()."\n";
?>
自己理解的仍然不行,看这里:http://www.laruence.com/2011/03/04/1894.html
分享到:
相关推荐
#### 函数的引用返回 在PHP中,可以通过引用的方式返回一个函数的结果。当一个函数使用`&`符号作为其返回值的一部分时,表示这个函数返回的是一个引用。 **示例代码**: ```php <?php function &test() { static...
本文将逐步介绍PHP函数的基础知识,包括函数的声明、参数的值传递与引用传递以及作用域问题。 1. **函数声明** PHP函数使用`function`关键字进行声明。例如: ```php function CustomPrint($str) { for ($i = 0...
3. **函数的引用返回** PHP函数可以返回引用,而不是值的拷贝。例如: ```php function &test() { static $b = 0; $b = $b + 1; echo $b; return $b; } $a = test(); // 输出1,但并未获得引用 $a = 5; $...
4. **取消引用**:通过`unset`函数可以取消变量的引用绑定,但是它并不销毁变量的内容。被取消引用的变量一旦再次被访问,将会提示一个警告,表明未定义变量。 ### 引用的深层次原理 PHP中的引用采用的是“写拷贝...
5. **取消引用**: - 使用 `unset()` 函数解除引用,并不会销毁变量内容,只是断开了变量名与内容之间的关联。`unset($a)` 并不会影响 `$b` 的值。 6. **引用传递的注意事项**: - 在函数调用时,如果需要引用...
- **取消引用**:`unset()`只解除引用,不销毁变量内容。例如,`unset($a)`不会影响`$b`。 - **全局引用**:`global`关键字创建的是全局变量的引用,`unset($var)`不会影响全局变量。 - **`$this`引用**:在对象方法...
使用`unset`函数可以取消引用,但请注意,这并不会销毁变量内容本身。 ```php $a = 1; $b = &$a; unset($a); // 断开$a与$b之间的引用关系,但$b仍然存在 ``` #### 六、全局引用 当在函数内部使用`global`关键字...
当unset($test)时,只取消了$test的引用,但$abc仍然存在,因此输出结果为空字符串。 2. 文件操作函数:在PHP中,用于打开文件读写的是`fopen()`函数,而不是`fget()`、`file_open()`或`open_file()`。 3. 静态...
PHP函数支持可变参数个数、通过引用传递参数以及递归调用。但是,PHP函数不支持通过指针传递参数。 7. **数组操作**: 要获取数组的大小或元素数量,可以使用`count()`函数,例如`count($array)`。 8. **代码...
1. `unset()`取消引用,但不会改变原始变量,所以`$a`仍是"hello"。 2. 自增操作符`++`优先级高于赋值,所以`$b`会是1,因为`$a`先自增再赋值给`$b`。 3. `empty()`检查变量是否为空,空数组视为假,因此`$x`是`true...
- **详细解析**:PHP函数支持多种参数传递方式,包括可变数量的参数、通过引用传递参数以及实现递归函数。但是,PHP不支持通过指针传递参数。 #### 20. 文件框的`type`属性值 - **选项分析**: - **A**: 错误。`...
- `&` 符号用于传递变量的引用,而非复制其值。 4. **条件判断** - `===` 和 `!==`: 等价于和不等价于,同时检查值和类型。 - `@` 符号可以抑制错误提示。 - 三元运算符 `? :` 用于简单条件判断,例如 `$result...
它接收两个参数:调用的方法名和传递给该方法的参数数组。当尝试调用一个对象上不存在的方法时,`__call()` 将被触发,从而允许你自定义错误处理或动态调用其他方法。 - `__callStatic()` 类似于 `__call()`,但它...