我正在用PHP编写一个web应用程序,并且我只在Google Chrome中获得以下警告:
警告:不能使用标量值作为数组M:'xampp'htdocs'MyProjectTitle'php'classes.php on line 18
背景:请注意,web应用程序在我测试的所有浏览器(Firefox, Chrome, IE)中工作得很好,但在Chrome中出现的警告让我很恼火。
注意:我已经尝试重新启动Chrome并清除Chrome缓存。我试过重新启动电脑。我试着在FF和IE中搜索源代码,看看警告是否只是隐藏,但无济于事。这个警告只在谷歌浏览器中弹出,我不知道为什么。
更新:即使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是唯一显示警告的浏览器)。由于我的webapp工作完美,尽管在Chrome浏览器的警告,我已经使用@
来抑制在Chrome浏览器的警告(我将修复以后的警告)。
最有可能的是:
$_SESSION[$this->name][$varname] = $value;
如果$_SESSION[$this->name]
之前没有定义为数组,您将得到"不能使用标量作为数组"错误。例如,如果你做
$_SESSION[$this->name] = 42;
$_SESSION[$this->name][$varname] = 'will not work';
错误触发
我有感觉,Chrome发送不同的数据到服务器,因此你有这个错误。如果有任何 $_POST数据,或$_GET数据,请验证与其他浏览器发送。您可以轻松地使用print_r()
或var_dump()
显示您选择的内容。
这通常是因为你做了一些特定于浏览器的事情(也许你做了一些特定于IE和firefox的事情,但忘记为其他浏览器添加"默认"大小写?)
更新:我确切地知道哪些行代码导致Chrome中的警告(尽管我仍然不知道为什么Chrome是唯一显示警告的浏览器…如果你知道,请告诉我!)。由于我的webapp工作完美,尽管在Chrome浏览器的警告,我已经使用@
来抑制警告作为临时修复,直到我可以修复它真正的以后。
这基本上是因为你试图访问一个未定义的变量(或未设置的变量)。
PHP省略了许多常见的编程错误,这是其他语言不允许的。
如果你启动一个程序:
<?php if(eregi("hi",$hello)) { echo "hi"; } ?>
将得到这个"message"注意:未定义的变量:hello在C:'var'www'test.php第1行
你应该将其预定义为:<?php $hello = "hello"; if(eregi("hi",$hello)) { echo "hi"; } ?>
或有条件地避免消除先前的值:$hello = isset($hello) ? $hello : null;
此代码还将向您发送一个已弃用的函数消息。
为什么这个消息是由你的服务器上的PHP.INI配置引起的,这是因为你有这样的东西:
display_error = on;
应该是这样的:
display_error = on;error_reporting = E_ALL &~ E_NOTICE,~代码
这将删除所有的通知消息,使PHP更允许,也可以添加~E_DEPRECATED如果你得到不赞成的消息,
如何得到这个消息,意味着你需要成为一个更敏感的程序员!是的更无聊,但总有人要做到!
可能是因为您需要在其他浏览器中执行ctrl +f5或重新启动。它可能缓存了以前版本的页面,我在使用ie8时经常遇到这种情况。