首页 > 编程语言 >php 判断 if (empty($user->published_at) != empty($user_input['published_at'])) 这个很简洁

php 判断 if (empty($user->published_at) != empty($user_input['published_at'])) 这个很简洁

时间:2024-05-16 16:42:03浏览次数:16  
标签:xor user && published input empty

这里的逻辑是:

  • 如果 $user->published_at 为空,并且 $user_input['published_at'] 不为空,或者
  • 如果 $user->published_at 不为空,并且 $user_input['published_at'] 为空,

那么条件将成立。这种检查通常用于确定某个值是否发生了变化,特别是从无到有或从有到无的情况。

假设您的意图是检测 published_at 字段从空到非空,或从非空到空的变化。如果这符合您的业务逻辑需求,那么这段代码是有效的。但务必确认,这种比较确实符合您的应用场景,尤其是在处理可能为 0'0' 等特殊值时,因为 empty() 会将它们视为空。

还有其他方法可以做到:

方法一:直观

if ((!empty($user->published_at) && empty($user_input['published_at'])) || (empty($user->published_at) && !empty($user_input['published_at']))) {
// 执行操作
}

方法二:三元运算符

if ((bool)$user->published_at != (bool)$user_input['published_at']) {
// 执行操作
}

方法三:封装函数(频繁使用时)

function hasStateChanged($original, $new) {
return (bool)$original != (bool)$new;
}

if (hasStateChanged($user->published_at, $user_input['published_at'])) {
// 执行操作
}

方法四:简化逻辑(使用XOR运算符(异或))

if (!empty($user->published_at) xor !empty($user_input['published_at'])) {
// 执行操作
}

虽然 xor 在特定情况下很有用,但在实际编程中使用较少,部分原因是它的优先级较低,可能会导致意外的结果,尤其是在复杂的逻辑表达式中。

// 可能导致意外结果
if ($a xor $b && $c) {
// 不清楚逻辑意图,因为 && 的优先级高于 xor
}

正确的做法应该是:

if (($a xor $b) && $c) {
// 现在清楚地表示了先进行 xor 运算,然后与 $c 进行逻辑与
}

标签:xor,user,&&,published,input,empty
From: https://www.cnblogs.com/aldcd/p/18196222

相关文章

  • pinus老项目启动遇'Property connector does not exist on type UserRpc'报错
    跟示例项目对比过,配置代码并无出入,尝试在示例中新增远程调用connectorRemote可用,证明代码配置正确尝试在示例项目中使用工作项目的配置文件包括引用的模块文件目录列表如下 packagespluginspackage.jsonpackage-lock.jsontsconfig.jsonyarn.lock 示例安装模块后,运......
  • ValueError: 'a' cannot be empty unless no samples are taken
    Here,Imettheerrormessageasfollows:defmaldroid_noniid(dataset,train_labels,num_users):num_shards,num_imgs=110,120idx_shard=[iforiinrange(num_shards)]dict_users={i:np.array([])foriinrange(num_users)}idxs=np......
  • 忘记zabbix监控平台Admin用户密码:Incorrect user name or password or account is tem
    如下图(实在想不起密码不要紧我们直接重新设置它):1.登入zabbix数据库[root@SJYS-Test1~]#mysql-uroot-pEnterpassword:WelcometotheMariaDBmonitor.Commandsendwith;or\g.2.进入zabbix库,查询users用户表MariaDB[(none)]>usezabbix;MariaDB[zabbix]>select......
  • dremio UserService 简单说明
    以前是简单说明过dremio的UserService,dremio实际上支持内部以及外部用户的玩法类图可以看到,包含了simple以及executor两个,同时实现了UserServiceEvents支持发布订阅能力的接口(订阅是25.0版本的)executor的实现实际上是为空的,核心是方便执行节点bindUserService,实际内......
  • Do Loyal Users Enjoy Better Recommendations? Understanding Recommender Accuracy
    目录概实验设置实验Interaction-basedLoyaltyActiveTimePeriodbasedLoyaltyRecency代码JiY.,SunA.,ZhangJ.andLiC.DoLoyalUsersEnjoyBetterRecommendations?UnderstandingRecommenderAccuracyfromaTimePerspective.ICTIR,2022.概讨论了推荐中一......
  • Ubuntu/Linux系统中的multi-user.target
    相关:https://www.cnblogs.com/devilmaycry812839668/p/17999041multi-user.target是Linux系统中systemd的一个目标。它表示系统已完成引导过程,并准备好供多个用户登录和使用系统。该目标通常包括在多用户环境中进行正常系统操作所需的服务和资源。RunLvlTargetU......
  • 解决vscode连接远程服务器出现Bad owner or permissions on C:\\Users\\Administr
    1.找到.ssh文件夹。它通常位于C:\Users2.右键单击.ssh文件夹,然后单击“属性”,选择“安全”3.单击“高级”。单击“禁用继承”,单击“确定”。将出现警告弹出窗口。单击“从此对象中删除所有继承的权限”。4.此时所有用户都将被删除。添加所有者。在同一窗口中,单击“编辑”按......
  • 在身份认证后建立用户对象ICurrentUser
    app.UseAuthentication();这个中间件添加后,他会为HttpContext.User设置一个ClaimsPrincipal对象。里面有身份认证token里面携带的信息。其访问方式如下HttpContext.User.FindFirstValue("自定义字段")我们可以创建一个服务,方便在应用中使用用户信息。因为在服务中拿不到Htt......
  • react中什么使用定义变量,需要使用useRef,什么时候直接定义即可?
    在React中,决定使用useState、useRef或是直接定义变量,主要取决于你希望变量如何与组件的渲染周期互动以及是否需要持久化某些值。直接定义变量场景:如果你只是需要一个在函数内部临时存储数据的变量,而且这个变量的值不需要在组件重新渲染时保持不变,或者它并不直接影响UI的渲染逻......
  • Linux 下以其他用户身份运行程序—— su、sudo、runuser
    转自:https://blog.csdn.net/u011250186/article/details/106335028/本文综合分析了Linux系统下,如何使用runuser命令、su命令和sudo命令以其他用户身份来运行程序,以及这三个命令的运行效率比较。 一、su命令临时切换用户身份SU:(Switchuser切换用户),可让一个普通用户切换为......