php的引用(就是在变量或者函数、对象等前面加上&符号)在PHP中引用的意思是:不同的名字访问同一个变量内容。 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容,在内存中存放的地址。1.变量的引用 PHP的引用允许你用两个变量来指向同一个内容<?php$a='abc';$b=&$a;var_dump($a,$b);//均为'abc'$b=123;var_dump($a,$b);//均为1232.函数的引用传递(传址调用)<?phpfunctiontest(&$a){$a=$a+100;}$b=1;test($b);var_dump($b);//101这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值注意: 上面的“test($b);”中的$b前面不要加&符号,但是在函数“call_user_func_array”中,若要引用传参,就得需要&符号<?phpfunctiontest(&$a){$a=$a+10;}$b=1;call_user_func_array('test',array(&$b));var_dump($b);//113.函数的引用返回function&test(){static$b=0;//申明一个静态变量$b=$b+1;echo$b;return$b;}$a=test();//这条语句会输出 $b的值 为1$a=5;$a=test();//这条语句会输出 $b的值 为2$a=&test();//这条语句会输出 $b的值 为3$a=5;$a=test();//这条语句会输出 $b的值 为6通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。$a=test()方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变都不会影响到函数中的$b而通过$a=&test()方式调用函数呢,他的作用是将return$b中的$b变量的内存地址与$a变量的内存地址指向了同一个地方。这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中:classtalker{private$data='Hi';publicfunction&get(){return$this->data;}publicfunctionout(){echo$this->data;}}$aa=newtalker();$d=&$aa->get();$aa->out();$d='How';$aa->out();$d='Are';$aa->out();$d='You';$aa->out();//输出为HiHowAreYou
1.方法传参(1).值传递:functionfunc_name($var);方法内部改变参数的值不影响方法外部参数的值(2).引用传递:functionfunc_name(&$var);方法内部改变参数的值会改变方法外部参数的值,传入的是参数的引用地址2.可变数量的参数列表a). int func_num_args(void):返回传入方法的参数数目,整型b). array func_get_args(void):返回传入方法的参数列表数组c). mixed func_get_arg(int$arg_num):返回方法参数列表的指定的参数,参数$arg_num对应func_get_args()返回数组中的键,即索引使用此类方法不需要在自定义方法中定义接收参数列表,如例:<?phpclassGetArgs{functionget_args_num(){$args_num=func_num_args();//获取参数列表中参数的数目return$args_num;}functionget_args(){$args=func_get_args();//接收传入的所有参数,可以以数组方式使用参数:$args[0],$args[1],...对应参数列表顺序return$args;}functionget_arg(){$arg_num=1;$arg=func_get_arg($arg_num);//获取索引为1的参数,如果索引值超出则会警告return$arg;}}$ga=newGetArgs();echo$ga->get_args_num(1,2,3);//3print_r($ga->get_args(1,2,3));//Array([0]=>1[1]=>2[2]=>3)echo$ga->get_arg(1,2,3);//2