我写了以下代码:
- <?PHP
- $a1 = "WILLIAM";
- $a2 = "henry";
- $a3 = "gatES";
- echo $a1." ".$a2." ".$a3. "<br />";
- fix_names($a1,$a2,$a3);
- echo $a1." ".$a2." ".$a3;
- function fix_names(&$n1,&$n2,&$n3)
- {
- $a1 = ucfirst(strtolower(&$n1));
- $a2 = ucfirst(strtolower(&$n2));
- $a3 = ucfirst(strtolower(&$n3));
- }
- ?>
这些都记录在PHP
Passing by Reference手册页上.具体(加重我的):
Note: There is no reference sign on a function call – only on function
definitions. Function definitions alone are enough to correctly pass
the argument by reference. As of PHP 5.3.0,you will get a warning
saying that “call-time pass-by-reference” is deprecated when you use &
in foo(&$a);. And as of PHP 5.4.0,call-time pass-by-reference was
removed,so using it will raise a fatal error.
因此,它在PHP 5.3.x中被弃用(并将发出警告),并且在PHP 5.4中将失败.
这就是说,这是一个微不足道的修复.只需更新您的fix_names函数,如下所示:
- function fix_names(&$n1,&$n3)
- {
- $a1 = ucfirst(strtolower($n1));
- $a2 = ucfirst(strtolower($n2));
- $a3 = ucfirst(strtolower($n3));
- }
顺便提一下,5.3.x系列的版本已经很长了,所以如果可能的话,更新到更新的版本(在进行必要的测试之后)是明智的.