PHP的行为因计算机而异

时间:2009-07-10 13:32:50

标签: php arrays pass-by-reference

我有一个问题,其中代码在计算机上工作,但不会在另一个

上工作
    function appendParam(&$req, $name, $value) {
    if (req == null) {
        return;
    }
    if (name == null) {
        return;
    }
    if (value != null) {
        $req[$name] = $value;
    }
}

上面的工作在一台计算机上,能够正确检查req和名称,并且变量是if条件不需要美元符号(当我把美元符号放在这台计算机上时)

但我需要在另一台计算机上使用以下代码来获得相同的最终结果

    function appendParam(&$req, $name, $value) {
    if ($value != null) {
        $req[$name] = $value;
    }   
    if ($name == null) {
        return;
    }
    if ($req == null) {
        return;
    }
}

在另一台计算机上它无法检查name或req对null(它中断) 我需要if条件中变量的美元符号。

作为旁注,似乎这台计算机无法读取尚未初始化的数组索引。

感谢任何帮助

4 个答案:

答案 0 :(得分:3)

这两台机器可能有不同的警告级别或错误报告级别。

我很困惑,你肯定在任何php变量名之前都有$前缀,否则你实际上没有检查变量?你想通过不使用$前缀

来实现什么

答案 1 :(得分:2)

这段代码对我来说没什么意义:

    function appendParam(&$req, $name, $value) {
    if ($value != null) {
                $req[$name] = $value;
        }       
    if ($name == null) {
                return;
        }
    if ($req == null) {
                return;
        }
}

应该这样写:

function appendParam(&$req, $name, $value)
{
 if(empty($name) || empty($value) || empty($req))
  return;

 $req[$name] = $value;
}

当你说它“休息”时,你能给出一个具体的例子/错误,你得到的以及你如何使用这个功能?我在想你正在使用它。

答案 2 :(得分:1)

为了简化这个问题的调试,有许多最佳实践值得尊重,这些BP也会使问题更加清晰,并希望从根本上解决它......

1)首先,您应该确保您的php.ini是一致的,并且以下参数设置为最佳值:

  

allow_asp_tag =关闭;通常不需要这样的标签   short_open_tags =关闭;这可以避免在处理xml数据/文档时出现问题   register_globals = Off;这是邪恶的4.1之前的默认值   log_errors = On;这两行   show_errors = Off;当需要安全时,他们对生产环境抱有希望   error_reporting = E_ALL & E_STRICT;这会使每个错误显示

2)避免使用“@”运算符来删除错误消息,必须处理,不要隐藏!此外,这是性能问题

3)选择正确的构造,算子或函数来测试条件。 IE,如果你测试变量不是“空”而不是对空字符串($ v ==“”)进行测试,这似乎一般都有效,但它依赖于运算符==强制的隐式转换,如果你已经使用了===运算符,那么测试就不是你想要的,当然

4)正如丹尼尔指出的那样,这个功能可以用更好的方式重写:


function appendParam(&$req, $name, $value)
{
    if (empty($name) || empty($value) || empty($req)) {
return; } $req[$name] = $value; }

如果你[想要]不能改变你的php ini,这是一个很好的做法 runtime设置日志级别,将其在配置文件中设置为调试功能,例如

    error_reporting = E_ALL | E_STRICT;

我的回答是完全启用每个错误报告,并且PHP会告诉你一些奇怪的东西,那些奇怪的东西(可能会是一个通知)将成为你问题的根源。

我的2美分:)

答案 3 :(得分:0)

是否有一台计算机正在使用旧版本的PHP?