Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在条件中添加多个对象操作符的方法_Php_Laravel_Object - Fatal编程技术网

Php 在条件中添加多个对象操作符的方法

Php 在条件中添加多个对象操作符的方法,php,laravel,object,Php,Laravel,Object,在PHP中,是否有一种方法对应多个对象操作符来检查特定条件 比如说 if( !empty($this->user()->city && !empty($this->user()->name && !empty($this->user->phone) ) 在这里,我必须检查城市条件、姓名、电话和其他房产的地段,有没有办法添加这样的快捷方式 if(!empty($this->user()->{city,name,ph

在PHP中,是否有一种方法对应多个对象操作符来检查特定条件

比如说

if( !empty($this->user()->city && !empty($this->user()->name && !empty($this->user->phone) ) 
在这里,我必须检查城市条件、姓名、电话和其他房产的地段,有没有办法添加这样的快捷方式

if(!empty($this->user()->{city,name,phone})

我认为你想做的事情是不可能的。我能想到的最接近的事情是定义一个属性数组并在循环中检查它们

$required = ['city', 'name', 'phone', 'lots', 'of', 'other', 'properties'];

$complete = true;
foreach ($required as $property) {
    if (empty($this->user()->$property)) {
        $complete = false;
        break;
    }
}
这有助于避免一个巨大的复杂的
如果
条件像那样;相反,你只是检查一下

if ($complete) ...
在循环之后


看起来你要做的就是实体验证。如果您使用各种PHP框架中的一种,那么有一些实用程序可以让您更容易地使用它。您只需将
必需的
注释添加到属性或类似的内容。

没有内置的多字段检查功能。根据变量中的值和你认为是空的值,你可以将所有字段串联起来,并检查空格:

if (empty($user->city . $user->name . $user->phone)) {
    // all fields are empty
} else {
    // at least one field is not empty
}
。。。但那是相当。。。丑陋的

还有很多其他的房产

这就是循环的作用。我只需编写一个方法来验证您是否具有必需的字段。可能是这样的:

class User
{

    const REQUIRED_FIELDS = ['name', 'city', 'state'];

    public function hasRequiredFields(): bool
    {
        foreach (self::REQUIRED_FIELDS as $field) {
            if (empty($this->$field)) {
                return false;
            }
        }
        return true;
    }

}
然后你可以做:

if ($user->hasRequiredFields()) {
    ...
}
如果您的用户对象已将所有必需字段定义为公共属性,则您只需迭代对象本身即可获得它们:

class User
{

    public $name;
    public $city;
    public $state;

    public function hasRequiredFields(): bool
    {
        foreach ($this as $key => $value) {
            if (empty($value)) {
                return false;
            }
        }
        return true;
    }

}

据我所知,并没有函数来测试这一点,您必须编写自己的自定义函数,例如检查数组中给定的条目是否为空 (发送给它的所有条目都是修补性的)


我不知道用户是什么,但是使用
$user=$this->user()会稍微短一点在前一行中。然后你会使用
$user->city$user->name
。顺便说一句,我不认为需要一个以上的参数。如果有必要,请检查括号。@FirstOne这不是重点,我可以这样做,但我仍然需要多次检查,比如
$user->city
,然后再次检查
$user->name
,这是怎么回事?你问城市、名字和电话,得到了什么?为什么投反对票,我只是问是否可能。是的,我用的是拉威尔,有什么解决办法吗laravel@Cowgirl-@MarkBaker这在我的环境中有什么用处?它允许您为模型属性定义规则,然后使用一个简单的验证调用来查看这些规则是否已被执行met@Cowgirl我正要粘贴刚才做的链接标记。如果我用的是Laravel,那肯定是我更喜欢的方式。我认为验证通常不是一行一行的事情。您可能会在某个时刻发现,除了验证某个内容是否为空之外,您还需要验证其他内容,而验证器可以轻松地同时完成所有这些工作。这似乎是有缺陷的。将
0
(被认为是空的)与另一个
0
连接是
00
,不再是空的。更不用说,连接消除了使用
的可能性。True——取决于变量中的内容以及OP认为空的内容。正如我所说,它相当难看。这增加了我代码的某种复杂性,而我的主要目标是使其更易于阅读,编写更少的代码。嗯,使用
的能力不在规范中:)我正在寻找一行代码:PI不认为使用一行代码是可能的。如果您在单个文件中编写了这样的函数并使用了该文件,那么它将是可能的。使用客户端验证。但它们很容易被打破。
function checkEmpty($arr)
{
  foreach($arr as $value)
  {
    if(empty(trim($value)))
    {
      return false;
    }
  }
  return true;
}
$arr = array('name'=>'nilesh','age'=>' ');
if(checkEmpty($arr))
 echo "true part here";
else
 echo 'False Part Here';