php引用以及php变量未使用

提一个关于引用的问题。代码如下:
1.


function foo($var){
    $var++;
}

在phpstorm里面是提示$var变量未使用,如果添加引用传递或者打印

2.

function foo(&$var){   //引用传递
    $var++;
}  

3.

function foo($var){   //打印或者其他比如return等操作
    echo $var;
}

就不会提示未使用,难道自增符号不算操作变量吗?
然后调用的时候:

$a = 5;foo($a);

1的结果仍是5,2的结果则为6。在引用和非引用的过程中,两个函数各是怎么操作$var这个变量的。

阅读 3.5k
3 个回答

首先关于phpstorm提示变量未使用这个,它的提示信息确实是正确的,在php的语法和代码风格检查方面,phpstorm向来是做的非常棒的。

函数参数的传值方式不同,按照值传递的时候,在函数内部实际上传递过来的是变量的副本,因此在函数内部修改也是修改的这个副本,不会对原变量产生影响。函数内部简单的修改变量$var的时候,仅仅是对其值进行了自增运算,没有输出任何结果,没有参与任何复杂的业务逻辑,这些对于phpstorm来说都是完全可以分析出来的。

而引用传值的方式,实际上函数内部的$var和外部的$var都是指向同一片内存区域,内部的修改,对外部是可见的(变量$var参与了输出)。

PhpStorm好是很牛啊。

function foo($var){
    $var++;
}

++是个操作,但是foo调用了也拿不结果,也不能通过参数影响程序的执行,所以phpstorm反过来推导这个$var没被使用。

$var++ 的意思是 $var = $var +1; 那你等号左边的这个$var 还是没有被使用.所以phpstorm这么提示是对的

第二个问题就就是函数的基础问题了. 函数操作的是变量的拷贝,不是变量本身,所以 $var++ 不会影响外面的这个$var

而传引用,就直接操作这个变量本身,所以外面的这$var 的值也变了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题