0

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

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

以上适用于一台计算机,并且能够正确检查 req 和 name 与 null 并且变量是 if 条件不需要美元符号(当我将美元符号放入时,它们会在这台计算机上中断)

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

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

在这台其他计算机上,它无法检查名称或 req 是否为空(它会中断),并且我需要 if 条件中的变量上的美元符号。

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

任何帮助表示赞赏

4

4 回答 4

3

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

我很困惑,当然你应该在任何 php 变量名之前有 $ 前缀,否则你实际上并没有检查变量?你想通过不使用 $ 前缀来实现什么

于 2009-07-10T13:40:12.800 回答
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;
}

当您说它“中断”时,您能否给出一个具体的示例/错误以及您如何使用该功能?我在想你用错了。

于 2009-07-10T13:40:45.717 回答
1

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

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

allow_asp_tag = 关闭;通常不需要这样的标签 short_open_tags = Off ;这避免了使用 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,最好在运行时设置日志级别,例如在配置文件中将其设置为调试功能

    error_reporting = E_ALL | E_STRICT;

我的答案是完全启用每个错误报告,PHP 会告诉你一些奇怪的事情,这种奇怪(可能是一个通知)将是你问题的根源。

我的 2 美分 :)

于 2009-07-10T16:18:22.383 回答
0

会不会是其中一台计算机使用的是旧版本的 PHP?

于 2009-07-10T13:34:03.777 回答