这是在PHP中编写长条件的好方法吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

我必须在PHP中评估一个非常长的条件,因此,为了避免错误并尝试编写更易读的代码,我做了以下内容:

 //this returns 1 when true, and nothing when false, although expected TRUE or FALSE

  $isNameValid=strlen($dataDecoded['nombre'])>=3;

  $isDescriptionValid=(strlen($dataDecoded['descripcion'])>=10) &&  strlen($dataDecoded['descripcion'])<=300;

  $isPriceValid=$dataDecoded['precio'] >0;

  $isImageValid=(($dataDecoded['imagen'] != "") && ($dataDecoded['imagen'] != NULL) );

现在,我可以做以下事情:

 if($isNameValid==1 && $isDescriptionValid==1 && $isPriceValid==1 && $isImageValid==1)
  {
      echo "ok";
  }
  else{
      echo "no";
  }

它似乎工作正常,但也许是一种奇怪的做事方式。我想避免以下情况,我发现这更令人困惑,容易犯错误

if(strlen($dataDecoded['nombre'])>=3 && ... && ...)

有没有更好的方法呢?我做错了吗?谢谢

提问于
用户回答回答于

这实际上取决于你想如何处理它。被切换选项或一个可行的吗?是三元,如果更漂亮或方便?

从我看到的,我猜你有一个验证目的和一个操作传入取决于验证。为什么不创建一个处理输入和验证的函数或类?在那里,你可以拥有你想要的所有脏代码。在你的逻辑代码上,你只需要做(例如一个类)

$someClass = new SomeClass();
$someClass->validate($fields);
if ($someClass->isValidated()) ...

这样,你实际上遵循一些标准,而它的目的是作为一个验证器(所有?取决于你的需要)你的数据

例如三元ifs

$isNameValid = count($dataDecoded['nombre'])>=3 ? true : false;
$isDescriptionValid = count($dataDecoded['descripcion']) >= 10 && count($dataDecoded['descripcion']) <= 300 ? true : false;
$isPriceValid = count($dataDecoded['precio']) > 0 ? true : false;
$isImageValid = empty($dataDecoded['imagen']) === false ? true : false;


if ($isNameValid && $isDescriptionValid && $isPriceValid && $isImageValid) ...

热门问答

两台腾讯云的服务器在同一个地区,内网网段也相同,都是172.17.0.X,为啥ping内网地址不通?

HappyLau谈云计算

腾讯云 · 云计算高级工程师 (已认证)

专注于公有云,私有云解决方案,在kubernetes,openstack,kvm,ceph,linux,shell有丰富的实战经验。
推荐已采纳

首先看下两台机器是否在同个vpc内,在同个vpc内默认网络可以互通,如果不在同个vpc内需要通过对等连接或者云联网打通,如果在同个vpc下无法互通,请检查下安全组和os的防火墙规则,放行icmp连接。

求问keil5项目无法下载到开发板该怎么解决?

Supowang

腾讯 · 高级工程师 (已认证)

腾讯物联网操作系统TencentOS tiny产品接口人---岁寒知松柏,做最好的自己!
推荐
请检查st-link的驱动和stlink硬件,如果不行,尝试换其他stlink下载器试试,谢谢! 如果还没有解决,请加TencentOS tiny官方QQ群提问,谢谢! qq.png ... 展开详请

腾讯服务器怎么回事?怎么突然就无法连接了?

HappyLau谈云计算

腾讯云 · 云计算高级工程师 (已认证)

专注于公有云,私有云解决方案,在kubernetes,openstack,kvm,ceph,linux,shell有丰富的实战经验。
推荐
无法登录的原因有很多,可以按照如下步骤检查: 1. 通过vnc登录,检查系统是否启动 2. 检查操作系统的防火墙iptables或windows防火墙 3. 检查安全组是否放行了登录端口和icmp 按照上述步骤排查,大部分问题都可以解决。... 展开详请

COS AndroidSDK类型说明哪里有?

rickenwang

腾讯 · 客户端开发工程师 (已认证)

推荐
GetServiceResult 这个类在 'com.tencent.qcloud:cosxml:5.4.29' 包中,简化版 'cosxml-lite:5.4.29' 没有包含GetServiceResult; 另外你说的 CosXmlService 、QCloudCreden...... 展开详请

GME Demo 用Unity 打包Internal 包 闪退?

腾讯音视频小蔡

深圳市腾讯科技 · 软件开发工程师 (已认证)

QQ:471381568
推荐

你好,发生此情况的原因大概率是没有打包GME v8a架构所导致。请检查一下打包出来的apk是否有Android v8a 的相关so文件。

只用云存储不用CDN加速,访问云存储上的内容使用的是云服务器上的流量么?这种访问收流量费么?

Lew

腾讯云对象存储 · 工程师 (已认证)

推荐

所属标签

扫码关注云+社区

领取腾讯云代金券