清除方法以检查某些对象属性是否为null

时间:2015-11-06 19:19:43

标签: php

我有一个结构

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语句)。

3 个答案:

答案 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。