验证中...
Languages: PHP
Categories: 编程语言基础
Latest update 2019-03-16 14:58
gistfile1.txt
Raw Copy
<?php
/**
1. 引用是什么?
a. 引用意味着用不同的名字访问同一个变量内容(这并不像 C 的指针,他们并不是实际的内存地址。 替代的是,引用是符号表别名。)
b. 如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。
*/
/**
2. 用能做什么?
a. 引用允许用两个变量来指向同一个内容。
b. $a =& $b;
* 这意味着 $a 和 $b 指向了同一个变量。
* $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。
* 如果具有引用的数组被拷贝,其值不会解除引用。对于数组传值给函数也是如此。
* 如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。
*/
function foo(&$var) { }
foo($a); // $a被创建,且值为null
/**
3. 引用不是指针
4. 引用传递
a.引用传递内容只能是:
* 变量,例如 foo($a)
* New 语句,例如 foo(new foobar())
* 从函数中返回的引用
5.引用返回
*/
function foo(&$var)
{
$var++;
}
function bar() // Note the missing & 这里没有使用引用
{
$a = 5;
return $a;
}
foo(bar()); // 自 PHP 5.0.5 起导致致命错误,自 PHP 5.1.1 起导致严格模式错误,自 PHP 7.0 起导致 notice 信息
foo($a = 5); // 表达式,不是变量
foo(5); // 导致致命错误
/**
6. 取消引用
当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。
*/
$a = 1;
$b =& $a;
unset($a); //不会 unset $b,只是 $a。
/**
* 引用定位
a.global 引用
b.$this 在一个对象的方法中,$this 永远是调用它的对象的引用。
*/
global $var; // 相当于 $var =& $GLOBALS["var"];
// 这意味着,例如,unset $var 不会 unset 全局变量。
/*************************** 华丽分割线 ***************************/
$var1 = 1;
$var2 = 2;
function test(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
}
test();
echo $var2; // 1
$var1 = 1;
$var2 = 2;
function test(){
global $var1,$var2;
$var2 = &$var1; // var2只是内部声明的一个局部变量
}
test();
echo $var2; // 2 $var2不能读取 test() 里面的局部变量

Comment list( 0 )

You need to Sign in for post a comment

Help Search

Gitee_sixth 5th_float_left_close