我正在用PHP编写一个Web应用程序,我只在Google Chrome中收到以下警告:
警告:无法使用标量值作为数组 M:\ xampp \ htdocs \ MyProjectTitle \ php \ classes.php 在线 18
背景:请注意,我测试的所有浏览器(Firefox,Chrome,IE)中的网络应用程序都运行正常,但Chrome中出现的警告让我感到很难过。
注意:我们已尝试重新启动Chrome并清除Chrome缓存。我试过重新启动电脑。我已经尝试在FF和IE中搜索源代码,看看警告是否只是隐藏,但无济于事。警告只会在Google Chrome中弹出,我不明白为什么。
更新:即使Safari也使用WebKit,它也不会显示PHP警告。出于某种原因,Chrome是唯一一个有PHP警告的人。奇怪的东西!
更新:这是前21行代码:
class Presenter {
public function includeFile($filePath) {
if (is_readable($filePath)) {
include $filePath;
} else {
echo '<p><strong>ERROR 404</strong></p>';
echo '<p>The resource you requested could not be located.</p>';
}
}
public function sanitize($string) {
return preg_replace("/\s/","_",$string);
}
public function set($varname,$value) {
$this->$varname = $value;
$_SESSION[$this->name][$varname] = $value;
return $this; // enables chaining!
}
// And there's more code after this, but I have cut it out here.
}
注意:上面的代码在PHP类中。
更新:我确切知道在Chrome中导致警告的代码行(尽管我仍然不知道为什么Chrome是唯一显示警告的浏览器)。由于我的网络应用尽管Chrome中出现了警告,但我已使用@
来抑制Chrome中的警告(我稍后会修复警告)。
答案 0 :(得分:4)
最有可能就是这样:
$_SESSION[$this->name][$varname] = $value;
如果先前未将$_SESSION[$this->name]
定义为数组,则会出现“无法使用标量作为数组”错误。例如如果你这样做
$_SESSION[$this->name] = 42;
$_SESSION[$this->name][$varname] = 'will not work';
错误被触发。
答案 1 :(得分:1)
我觉得Chrome会向服务器发送不同的数据,因此您遇到此错误。如果任何 $ _POST数据或$ _GET数据,请验证其他浏览器发送的数据。您可以使用print_r()
或var_dump()
轻松显示内容,无论您选择哪个。
答案 2 :(得分:1)
这通常是因为你做某些浏览器特定的事情(也许你做某些IE特定的事情,特定于firerfox,但忘了为其他浏览器添加“默认”案例?)
答案 3 :(得分:1)
更新:我确切知道哪些代码行导致了Chrome中的警告(虽然我仍然不知道为什么Chrome是唯一显示警告的浏览器... 如果您知道,请告诉我们! 强>)。由于我的网络应用尽管在Chrome中出现了警告,但我已经使用@
将警告抑制为临时修复,直到我可以在以后修复它为止。
答案 4 :(得分:1)
基本上这种情况正在发生,因为您正在尝试访问UNDEFINED变量(或未设置变量)。
PHP省略了许多常见的编程错误,其他语言不允许这样做。
好的,如果你开始像这样的程序:
<?php if(eregi("hi",$hello)) { echo "hi"; } ?>
会得到这个“消息” 注意:未定义的变量:第1行的C:\ var \ www \ test.php中的hello
你可以将它预定义为:
<?php $hello = "hello"; if(eregi("hi",$hello)) { echo "hi"; } ?>
或者有条件避免消除以前的值:
$hello = isset($hello) ? $hello : null;
此代码也会向您发送已弃用的函数消息。
为什么这些消息是由服务器上的PHP.INI配置引起的,这种情况发生的原因是你有这样的事情:
display_error = on; error_reporting = E_ALL;
可能是这样的:
display_error = on; error_reporting = E_ALL&amp; ~E_NOTICE&amp; 〜E_STRICT
这将删除所有NOTICES消息并使PHP更具有效果,如果您收到已弃用的消息,也可以添加~E_DEPRECATED,
如何获取此消息,意味着您需要成为更加敏感的程序员!是的,更多的是tediuos,但有些人必须成功!
答案 5 :(得分:0)
可能是因为您需要在其他浏览器中执行ctr + f5或重启。它可能有一个以前版本的页面缓存,在Internet Explorer 8中遇到了很多。