我想创建一个将验证表单输入的类(请不要发表关于重新发明轮子的评论)。
我认为使用静态验证方法更有意义,而不必实例化验证对象,因为对象不会保存任何数据?
例如,像:
<?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函数之外它没有任何作用,但这只是为了说明我的观点。
静态方法类是更好的选择吗?如果没有,为什么?
答案 0 :(得分:1)
我建议不仅要使验证方法保持静态,还要允许实例化类。
让我们假装我们称之为'Field'。那么拥有一个带有参数的构造函数会很好:field_name,widget_type,validator_type以及您想要的任何其他内容。然后你可以只创建Field对象并调用'validate()'或其他类似命名的函数。
例如:
$email_field = new Field('Email','entry','email_validator');
$email_field.validate();
然后,构造函数可以从请求变量中获取它的值,而validate函数将查找名为“email_validator”的静态验证器。更好的方法是将验证器放在构造函数中......
答案 1 :(得分:0)
我认为,如果在验证器类的特定实例上使用多个函数调用。最好使用单例方法或只创建一个实例(即$validator = new Validator;
);
记忆明智这将是最好的选择,我会说,如果你有(比方说)100个单独的静态调用,而不是1个实例,100个调用,你最好创建一个新的实例
答案 2 :(得分:0)
对我来说,使用验证器类似乎是更好的选择。如果不需要类变量,则可以在不实例化的情况下使用它。如果你不需要该类的长期实例,它将不需要RAM中的任何空间。
答案 3 :(得分:0)
考虑代码的可维护性和可读性。它总是很容易构建框架和类等等,但在100 LOC而不是40中嵌入相同的功能并不总是很好的选择。决定应取决于您的验证员将做什么。
如果它没有内部状态,并且没有复杂的参数,请不要创建类。
一个简单的函数不仅分析起来更简单,它还会让用户知道没有副作用,他不需要阅读比他打算使用的函数更多的文档。
保持简单。