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来代表匹配值

你可能感兴趣的:(学习笔记)