当我访问对象/数组的未定义属性时,php不会抛出错误而只是一个通知

时间:2013-09-19 19:53:05

标签: php json

所以javascript(ajax)将一个字符串化的JSON对象发送到php,它获取json_decoded,然后我引用该对象的属性,以便将它们保存在数据库中。

$Name = $Person->Name;
$Surname = $Person->Surname;

现在客户端可能是恶意的,它可能在将JSON发送到服务器之前重命名了一些Person属性名称,我想避免这种情况。

所以客户端可以将“Name”属性重命名为“Name555”,所以当我尝试获取$ Person-> Name 我认为时会抛出错误但不幸的是它没有相反,我回到客户端只是注意到:

Notice: Undefined property: stdClass::$Name in /home/aaa/public_html/saveperson.php on line 38

在这种情况下,是否有任何非hacky方式让php抛出错误?或者在服务器端解决问题的任何一般方法(最好是非hacky,也许是一些php.cnf配置或什么?)。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

它已经抛出错误。如果您决定立即对其进行操作,则可以使用set_error_handler安装自定义错误处理程序。

也就是说,这不是检查传入数据的PHP方式(或任何语言的方式)。一个强大的应用程序会主动检查输入是否有效,如果不是则执行某些操作。在这种情况下,您可以使用:

if (!isset($Person->Name)) {
    // do something here
}

答案 1 :(得分:1)

我的try / catch语句错误,但是

if(!isset(@Person->Name)){ throw new Exception... }

应该有用。