我有一个问题,其中代码在计算机上工作,但不会在另一个
上工作 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条件中变量的美元符号。
作为旁注,似乎这台计算机无法读取尚未初始化的数组索引。
感谢任何帮助
答案 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?