php学习笔记2

第1题:PHP中&、global、$GLOBALS
$var1=1;
$var2=2;
function test(){
    global $var1,$var2;//引用两个全局变量,并不是直接拿两个全局变量本身来用。
    $var1=3;//将引用过来的两个全局变量赋值为3。
    $var2=3;
    echo $var1;
    echo $var2;
}
test();//执行方法,$var1、$var2分别输出为3。
echo $var1;//这里输出的是顶部定义的两个全局变量,他们输出也为3,因为引用变化是双向的(在函数内部已经通过引用方式将两个全局变量赋值为3,所以外部全局变量会改变)。
echo $var2;

$var1=1;
$var2=2;
function test(){
    global $var1,$var2;
    $var1=&$var2;
    $var1=3;
    echo $var1;//输出3
    echo $var2;//输出3
}
test();
echo $var1;//输出1
echo $var2;//输出3
提问:为何最后输出全局变量$var1的值是1而不是3?
答案:在test()方法内部,$var1、$var2分别引用全局变量$var1、$var2,然后$var1引用了$var2,此时$var1不再引用全局变量$var1,改变$var1的值,全局变量$var1不会受影响,还是初始值1。
第2题:


$var1=1;
$var2=2;
function test(){
    $GLOBALS['var1']=&$GLOBALS['var2'];
    $GLOBALS['var1']=3;
    echo $GLOBALS['var1'];//输出3
    echo $GLOBALS['var2'];//输出3
}
test();
echo $var1;//输出3
echo $var2;//输出3
提问:写出输出结果,为什么?
答案:最后输出3333,因为$GLOBALS的定义是引用全局变量本身来用,也就是说$GLOBALS['var1']、$GLOBALS['var2']就是全局变量$var1、$var2本身,然后$GLOBALS['var1']引用了$GLOBALS['var2'],根据引用定义:“引用变化是双向的”,$GLOBALS['var1']赋值为3后,$GLOBALS['var2']也会为3,输出全局变量$var1、$var2自然也就为3了。
正则表达式preg_replace中$replacement参数用\${0} 或者\\0来代表匹配值