Php 在条件中添加多个对象操作符的方法
在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
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';