2015-11-06 2 views
1

У меня есть на структуруЧистый способ проверить, если некоторые из свойств объектов являются недействительными

class foo{ 
    public $a; 
    public $b; 
    public $c; 
} 

Это заселяется на разобранные объекты JavaScript отправленных с помощью AJAX. Прежде чем я сохраню структуру в моей базе данных, я хочу проверить, что некоторые из ключей не являются нулевыми, если кто-то обходит проверку переднего конца. Я знаю, что могу сделать

function validate($someFoo) 
{ 
    if (!$someFoo->a) { 
     return false; 
    } 
    if (!$someFoo->b) { 
     return false; 
    } 
    return true; 
} 

Но есть более чистый способ сделать это (на самом деле я проверка ~ 10 полей, так что это 10, если заявления).

+0

[Это] (http://php.net/manual/en/function.is-null.php) должна быть полезной –

+0

Вы можете использовать один 'if' заявление для всех проверок. –

ответ

2

Вы можете использовать get_object_vars, чтобы получить массив свойств объекта.

function validate($someFoo) { 
    foreach (get_object_vars($someFoo) as $var) { 
     if ($var === null) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

Ты бил меня буквально, как 10 секунд. Единственное различие заключается в том, что мое предпочтение всегда сравнивается с константой с переменной (например, if (null === $ var)) – jpaljasma

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)); 

Выше кода вернет false, если хотя бы одна из переменных $ myFoo имеет значение NULL.

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"; 
} 
Смежные вопросы