PHP 不会抛出错误,而只是在我访问对象/数组的未定义属性时发出通知


php doesn't throw an error but just a notice when i access an undefined property of an object/array

所以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

在这种情况下,有没有任何非黑客方法可以让 php 抛出错误?或者在服务器端解决问题的任何通用方法(最好是非黑客的,也许是一些php.cnf配置或其他东西?

提前谢谢你。

它已经抛出了一个错误。如果您决定立即采取行动,则可以安装带有 set_error_handler 的自定义错误处理程序。

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

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

我的尝试/捕获语句是错误的,但是

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

应该工作。