1

我想创建一个验证表单输入的类(请不要对重新发明轮子发表评论)。

我认为拥有一个具有静态验证方法的类更有意义,而不是因为该对象不包含任何数据而必须实例化一个验证对象?

例如,类似:

<?php

class Validator {

    static function is_numeric($val) {

        if(is_numeric($val))
            return true;

    }

}

允许我使用:

if(!Validator::is_numeric($_POST['age'])) $error['age'] = "Age must be a number";

然而:

<?php

class Validator {

    public function is_numeric($val) {

        if(is_numeric($val))
            return true;

    }

}

是否意味着必须实例化该类的实例才能使用这些函数——我认为这是对系统内存的毫无意义的使用?:

$validator = new Validator();
if(!$validator->is_numeric($_POST['age'])) $error['age'] = "Age must be a number";

我的示例验证方法是一个糟糕的示例,因为它除了使用标准的 PHP is_numeric 函数之外什么也没做,但这只是为了说明我的观点。

静态方法类是更好的选择吗?如果不是,为什么?

4

4 回答 4

1

我建议不仅将您的验证方法设为静态,而且还允许对类进行实例化。

假设我们称我们的类为“Field”。然后,最好有一个带有参数的构造函数:field_name、widget_type、validator_type 以及您想要的任何其他内容。然后你可以只创建 Field 对象并调用'validate()'或其他类似命名的函数。

例如:

$email_field = new Field('Email','entry','email_validator');
$email_field.validate();

然后构造函数可以从请求变量中获取它的值,验证函数将寻找一个名为“email_validator”的静态验证器。更好的办法是将验证器放在构造函数中......

于 2012-06-01T10:17:42.173 回答
0

我认为,如果您在验证器类的特定实例上使用多个函数调用。最好使用单例方法或只创建一个实例(即$validator = new Validator;);

内存方面,这将是最好的选择,我会说,如果你(假设)对类有 100 次单独的静态调用,而不是 1 个实例和 100 次调用,那么你最好创建一个新实例。

于 2012-06-01T09:14:44.293 回答
0

对我来说,使用验证器类似乎是更好的选择。如果不需要类变量,您可以在不实例化的情况下使用它。如果您不需要该类的长期实例,则它不需要 RAM 中的任何空间。

于 2012-06-01T09:15:15.347 回答
0

考虑一下代码的可维护性和可读性。构建框架和类等总是很诱人,但是在 100 个 LOC 而不是 40 个 LOC 中嵌入相同的功能并不总是好的选择。这个决定应该取决于你的验证者会做什么。

如果它没有内部状态,也没有复杂的参数,就不要创建类。

一个简单的函数不仅更易于分析,它还可以让用户知道没有副作用,他不必阅读比他打算使用的函数更多的文档。

把事情简单化。

于 2012-06-01T10:27:47.173 回答