我正在合作开发REST API基本上在开发模式中断的项目,因为它有一个更多的包含错误报告策略。这是该项目中的典型行:
public function someAction() {
// Returns a map of params => values sent with HTTP req
$params = $this->getParams();
// This key may not exist --+
// |
// v
$someField = $params['someField'] ?: 'default value';
$someField = $this->sanitizeInput($someField);
// ...
}
因此,开发模式下的JSON响应通常会出现 PHP:注意:未定义的索引警告,这将破坏JSON输出字符串。
我的问题
isset()
或array_key_exists()
对每个假定的数组键进行包装是否值得一试?isset()
,但代码看起来非常臃肿...... 答案 0 :(得分:4)
忽略这样的错误的问题正是你所发现的 - 调试成为一个巨大的痛苦,而且可能的真正错误被视为“正常行为”。
然而,与编程中的任何其他时间一样,如果您发现自己一遍又一遍地编写相同的代码,则可能需要编写抽象。
在您的情况下,您可以向该类添加其他方法,以及getParams
(可能只返回$_REQUEST
的内容),添加getParam()
方法:< / p>
function getParam($key, $default=null)
{
return isset($_REQUEST[$key])? $_REQUEST[$key] : $default;
}
然后你的主叫代码变成:
$someField = $this->getParam('someField', 'default value');
编辑您也可以将卫生调用添加到此方法中:
function getParam($key, $default=null)
{
return isset($_REQUEST[$key])? $this->sanitizeInput($_REQUEST[$key]) : $default;
}
进一步减少您的通话代码。现在,您不仅拥有适当的无错误代码,而且还将调用代码从三行中删除:
$params = $this->getParams();
// This key may not exist --+
// |
// v
$someField = $params['someField'] ?: 'default value';
$someField = $this->sanitizeInput($someField);
一个人:
$someField = $this->getParam('someField', 'default value');
答案 1 :(得分:-1)
请参阅https://www.owasp.org/index.php/OWASP_Secure_Coding_Practices_-_Quick_Reference_Guide以遵循最佳做法