为什么我得到"只有变量应该通过引用传递"错误?

the*_*cat 9 php variables pass-by-reference

看看这段代码:

$last = end($p = explode('/', $someString));  
Run Code Online (Sandbox Code Playgroud)

得到这个通知:

只应通过引用传递变量

我真的很困惑,因为它$p是一个变量.

Tch*_*upi 12

end()期望变量,而不是参考.在你的例子$p = explode('/', $someString)中不是一个变量,它是一个赋值.正如文件所说:

此数组通过引用传递,因为它由函数修改.这意味着你必须传递一个实变量而不是一个返回数组的函数,因为只有实际变量可以通过引用传递.

你应该这样做:

$p = explode('/', $someString);
$last = end($p); 
Run Code Online (Sandbox Code Playgroud)

  • @MathieuImbert在任何情况下,多个赋值返回值,而不是变量,因此PHP没有办法(还)通过OP建议的方法创建引用. (2认同)

Dan*_*jel 11

函数end()需要一个实数变量,而不是一个返回数组的函数,但是如果你把函数return放在双括号中,PHP就不会报告严格的标准通知:

$last = end( ( explode( '/', $someString ) ) );
Run Code Online (Sandbox Code Playgroud)

  • @Jirka据记载,当你使用`$ b =($ a = 5)`时,在第二面不再是表达式,你把它变成了一个变量. (2认同)

JAL*_*JAL 5

问题是你正在为一个函数做赋值,而传递给$ last的值实际上是函数的结果,而不是$ p.并且,explode返回对变量的引用.

分为两行:

$p = explode('/', $someString);
$last = end($p);  
Run Code Online (Sandbox Code Playgroud)

除非你以后使用$ p,否则没有理由在end()的函数调用中分配$ p.为了风格清晰,无论如何我建议分两步完成.