我有一个结构
class foo{
public $a;
public $b;
public $c;
}
这是由一个用AJAX发送的经过解析的javascript对象填充的。在我将结构存储在数据库中之前,我想验证某些键是否为null,以防有人绕过前端验证。我知道我能做
function validate($someFoo)
{
if (!$someFoo->a) {
return false;
}
if (!$someFoo->b) {
return false;
}
return true;
}
但有没有一种更干净的方法可以做到这一点(事实上,我正在检查大约10个字段,所以这是10个if语句)。
您可以使用get_object_vars
来获取对象属性的数组。
function validate($someFoo) {
foreach (get_object_vars($someFoo) as $var) {
if ($var === null) {
return false;
}
}
return true;
}
这是一种非常干净的检查空类字段的方法。我看不出有什么理由把它简化得更多。只需分别检查每个字段。
使用这种技术,您可以很容易地添加其他可能导致Foo
实例无效的情况——例如,您可能有一些其他函数createConnection(...)
,它可能会使Foo
实例无效。您可以添加一个错误(addError
)并检查isValid
。
您可以通过添加其他集合(如Warnings或Notices)以及这些集合的更多访问器函数来对此进行扩展。
<?php
class Foo {
private $a;
private $b;
private $c;
private $errors = array();
public function __construct($a, $b, $c) {
$this->a = $a;
$this->b = $b;
$this->c = $c;
if ($this->a === null) {
$this->addError("A is null");
}
if ($this->b === null) {
$this->addError("B is null");
}
if ($this->c === null) {
$this->addError("C is null");
}
}
protected function addError($error) {
$this->errors[] = $error;
}
public function isValid() {
$isValid = count($this->errors) == 0;
return $isValid;
}
}
$foo = new Foo("TestA", "TestB", null);
if( $foo->isValid() ) {
echo "Foo is valid";
}
else {
echo "Foo is not valid";
}
您可以使用get_object_vars()
来实现您的目标。
class foo {
public $a;
public $b;
public $c;
}
function validate($someFoo)
{
$classVars = get_object_vars($someFoo);
foreach($classVars as $cv) {
if(null === $cv) return false;
}
return true;
}
$myFoo = new foo();
var_dump(validate($myFoo));
如果$myFoo变量中至少有一个为NULL,则上面的代码将返回false。