我的理解对吗,之所以$b输出1是因为$a默认为0?

<?php
function test (&$b){
$b++;
echo $b.'
';

}
test($a);
$a=100;
echo $a;

这代码改改,可以更好理解$a的变化:
<?php
function test (&$b){
$b++;
echo $b.'
';
}
test($a);
echo $a;
$a=100;
echo $a;

是的,php会为没有赋值的代码初始化一个默认值,对于整数,这个值是0

初始化值和java是一样的。
学习的时候该怎么注意?我觉得最重要的是学以致用,多练手,编写一些有实际意义的代码,helloworld级别的代码就不要写太多了,更不要去钻牛角尖,搞些奇奇怪怪的测试程序,多关注现实问题。

好像是这个意思,但跟$a没关系啊我看着

这段代码有两个问题

function test (**&**$b){
$b++;
echo $b.'
';
}
test($a);
echo $a;
$a=100;
echo $a;


  • 要注意的是:test函数是引用传值的,但是在这里并没有什么意义,$a没有初始化就传过去,ok现在是需要传引用的,解释器会给$a 初始化一个默认值0,把$a的引用传递过去,这样你下面eacho $a;才会输出1,因为$a的生命周期还没有结束,如果不是引用传递 $a是不会输出1的。

楼上的有没有考虑下面两个函数的区别?

 function test (&$b)
 function test ($b)

这也算是是弱类型语言的陷阱所在。