搜索php对象的空值

时间:2013-07-23 17:54:13

标签: php oop object

寻找下面的最佳方法。如果我的用户对象中的ANYTHING为空,我想返回TRUE,我不关心哪一个是空的。我想我之前在搜索数组中的空值时已经完成了这个,但是无法想到用对象执行此操作的最佳方法。

我知道我可以通过对象循环并在对象中找到一个空值时断开,但首先检查是否有更好的方法来执行此操作,谢谢!

function is_it_empty($user)
{
 $is_it_empty = FALSE;
 if( isset($user->first_name) )
   $is_it_empty = TRUE;

 if( isset($user->last_name) )
   $is_it_empty = TRUE;

 return $is_it_empty;
}

也:

function name($user)
{
 foreach($user as $u):
   if( isset ($user->value) ): // or should it be isset?
      return true;
      break;
   endif;
 endforeach;

 return true;
}

4 个答案:

答案 0 :(得分:1)

$user = new stdClass();
$user->firstName = 'Mark';
$user->lastName = 'Baker';
$user->sanity = NULL;

function is_it_empty($user) {
    foreach($user as $property) {
        if (empty($property)) {
            return true;
        }
    }
    return false;
}

var_dump(is_it_empty($user));

答案 1 :(得分:0)

你可以使用foreach。它比你的代码更好。

        function is_it_empty($user)
        {
        foreach($user as $key=>$value)
        {
         if( empty($value) ){
           return = TRUE;
        }
}
    }

答案 2 :(得分:0)

如果任何人碰巧关心封装,这个代码可能会出现。第一个函数仅检查公共属性。

function is_prop_empty( $object ) {
$reflect = new ReflectionClass($object);
$props   = $reflect->getProperties();

foreach ($props as $prop) {
    try {
        $result = $prop->getvalue( $object );

        if( $result === null ) {
            return true;
        }
    } catch( Exception $e ) {
    }
}

return false;
}

var_dump( is_prop_empty($user) );

使用第二个,您可以查看私有和受保护的属性:

function is_prop_empty( $object ) {
        $reflect = new ReflectionClass($object);
    $props   = $reflect->getProperties();

    foreach ($props as $prop) {     
        $prop->setAccessible(true);
        $result = $prop->getvalue( $object );
        if( $result === null ) {
            return true;
        }
    }

    return false;
}

修改

通过清空,我认为你的意思是null但你可以修改上面的功能以满足你的“空”要求。

答案 3 :(得分:0)

我认为使用这个通用函数检查一个值是否存在就可以完成工作

function is_empty($data) {
  if(empty($data) || !isset($data) || $data == false) {
    return true;
  }
  return false;
}