我有一个结构
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语句)。
答案 0 :(得分:2)
您可以使用get_object_vars
获取对象属性的数组。
function validate($someFoo) {
foreach (get_object_vars($someFoo) as $var) {
if ($var === null) {
return false;
}
}
return true;
}
答案 1 :(得分:1)
这是一种检查空类字段的非常简洁的方法。我没有看到任何简化它的理由。只需分别检查每个字段。
使用此技术,您可以轻松添加可能导致Foo
个实例无效的其他情况 - 例如,您可能有一些其他函数createConnection(...)
可能会使Foo
实例无效。您可以添加错误(addError
)并检查isValid
。
您可以通过添加其他集合(例如警告或通知)以及更多访问者函数来扩展此功能。
<?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";
}
答案 2 :(得分:0)
您可以使用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。