何时验证/清理重写方法的参数?

时间:2014-06-18 14:03:22

标签: php validation oop sanitization method-overriding

关于验证/清理类中重写方法的参数,您能说些什么?

如果我有类似

的话
class parentClass
{
    public function originalMethod($id) {
        if(is_numeric($id) && (int) $id > 0) {
            // use $id
        }
    }
}

和一个覆盖方法的子类

class childClass extends parentClass
{
    public function originalMethod($id) {

        parent::originalMethod($id);

        // do other stuff 
    }
}

我的问题是:

在哪种情况下您会继续验证方法的参数?

我不应该期望/假设在父方法中已经执行了正确的验证吗?

我已经看过一些代码,其中再次执行验证(不是像上面那样简单的情况)。

您每次都会验证吗?决不?只是在某些情况下?

2 个答案:

答案 0 :(得分:1)

在上面的情况中,必须重新验证,因为如果输入无效,父级不会中止代码的执行。它只是封装了自己的代码。

在您可以控制父功能的其他情况下,您可以确定,它确实会从无效输入中保存您的覆盖功能,您可以跳过测试。

一般来说,我会重新评估,只是为了保存。如果这在以后成为性能问题,您可以逐个重新考虑这种方法。

答案 1 :(得分:1)

我通常用作一般指导原则:

  • 如果在重写函数中调用基函数作为第一个语句,则验证为 已经在重写函数中完成。在某些情况下,需要在重写的函数中添加其他验证。除非基函数更改了用于验证的变量,这些变量在重写函数中使用。
  • 如果未调用基本功能,则必须考虑验证;通常需要复制,有时扩展或删除(部分)。
  • 如果在覆盖函数之后(或不在开头)调用基函数,则可能需要进行一些验证;另一个验证将在基本功能中处理。

当然这只是一个指导方针;可能会发生异常。