0

在下面寻找完成的最佳方法。如果我的用户对象中的 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

4 回答 4

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));
于 2013-07-23T17:59:20.047 回答
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但您可以修改上面的函数以满足您对“空”的要求。

于 2013-07-23T18:11:30.790 回答
0

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

        function is_it_empty($user)
        {
        foreach($user as $key=>$value)
        {
         if( empty($value) ){
           return = TRUE;
        }
}
    }
于 2013-07-23T18:00:01.303 回答
0

我认为拥有这个通用函数来检查值是否存在可以完成这项工作

function is_empty($data) {
  if(empty($data) || !isset($data) || $data == false) {
    return true;
  }
  return false;
}
于 2013-07-23T20:16:29.640 回答