PHP 三元 !empty 而不是评估为真或假 可用isset()

这篇具有很好参考价值的文章主要介绍了PHP 三元 !empty 而不是评估为真或假 可用isset()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是否可以使用速记三元来检查变量是否已设置,而不是是否计算结果为零或非零?

例如,我试过:

$var = 0;
echo (string) $var ?: (string) false ?: 2;

但由于前两个表达式的计算结果均为“0”或“false”,因此显示为 2。

我认为也许将它们转换为字符串会产生不同的结果,但事实并非如此。我想零就是零。

我想在分配变量时使用这种样式,例如

$get->var = $get->var ?: $setindb ?: $default;

如果设置了$get->var,我想将$get->var分配给$get->var,否则,检查db是否有值,否则,使用默认值。

我想我会提到我知道我可以做类似的事情

$get->var = (!empty($get->var)) ? $get->var : ( (!empty($setindb)) ? $setindb : $default )

但你来判断哪个更简单:)

【问题讨论】:

  • 为什么不使用 isset($get->var) 代替?

  • 好吧,在我上面的例子中,不是空的, isset 会更合适,但这仍然让我处于同样的情况。我一直在寻找一种更清洁、更简单的方法。

【解决方案1】:

字符串“0”和“false”在 PHP 中被视为 FALSE-y (list of false values) 值。

isset() 为已设置的变量返回 TRUE 而不是 NULL。 empty() 将检查变量是否已设置,并且该变量不是 FALSE 值。所以它会为“0”返回TRUE

我认为你想要的是你的第三个代码 sn-p,但使用isset(),而不是empty()

最简单的方法(使用最少的括号)是:

$get->var = isset($get->var) ? $get->var : (isset($setindb) ? $setindb : $default);

由于速记三元返回第一个参数,你不能使用它,因为那将是一个布尔值。 (isset($get->var) ?: $default 将返回 TRUEFALSE 或 $default,但绝不会返回 $get->var 的值。)


编辑:也许你想要一个像合并函数这样的东西?据我所知,PHP 本身并不提供它,但创建起来很简单。请注意,这可能有点难看,因为它使用传递对函数的引用。我会对这方面的 cmets 感兴趣(它有我想的那么糟糕吗?)。

function coalesce(array $values)
{
    foreach($values as &$value)
    {
        if(isset($value))
            return $value;
    }
    return null;
}
$this->var = coalesce(array(&$this->var, &$setindb, $default));

我还没有测试过上述内容。将数组中的变量作为引用传递(& 符号)。我很确定它会被 coalesce(array(1,"a_string",false)); 这样的东西窒息。

【讨论】:

  • 好的,不知道是否有一些技巧(比如强制转换)三元会检查除真假以外的技巧

empty()和isset()的区别及应用场景:

a.当判断一个变量是否定义时,可用isset();

应用:表单提交时用isset($_POST['submit'])的值来判定是否提交表单。

b.当判断一个变量是否为空时(不需要知道其是否赋值),可用empty();

应用:表单验证时,需验证必填项值是否为空。

c.当判断一个变量已经存在且不为空,可先用isset(),再用empty();

应用:文件上传时,需判断$_FILES已赋值,且不为空。
 文章来源地址https://www.toymoban.com/news/detail-660072.html

到了这里,关于PHP 三元 !empty 而不是评估为真或假 可用isset()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git commit 导致报错subject may not be empty [subject-empty] type may not be empty [type-empty]

    subject may not be empty [subject-empty] type may not be empty [type-empty] ✖ 主题不能为空[主题为空] ✖ 类型不能为空[类型为空] 查看列表        ls  帮助信息        pnpm -h 设置镜像        pnpm config set registry https://registry.npmmirror.com/ 在终端输入git commit -am \\\"**\\\",提交代码时 会触发

    2024年04月14日
    浏览(38)
  • 【git commit报错】报错信息:type may not be empty [type-empty] subject may not be empty [subject-empty]

    使用【git commit报错】 报错信息 :type may not be empty [type-empty] subject may not be empty [subject-empty] 报错原因 :git commit -m ‘feat:完成能力包审核开发’ 中 :后没加空格 解决报错 : :后 加空格即可

    2024年02月11日
    浏览(49)
  • git commit 规范不对导致报错subject may not be empty [subject-empty]type may not be empty [type-empty]

    使用commitlint之后报错 报错信息 找了很久原因,才发现TMD这里要有空格才能算正确的提交,emo 真是个奇葩的报错

    2024年02月12日
    浏览(47)
  • subject may not be empty | type may not be empty

    ✖ subject may not be empty [subject-empty] ✖ type may not be empty [type-empty] ✖ found 2 problems, 0 warnings ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint 原因是使用了规范commit信息的工具,你的提交信息不符合规范,所以被拒绝了 commit规范工具 commitlint husky 解决方式一:修

    2024年02月16日
    浏览(70)
  • 三元运算符

    三元运算符 三元运算符通常在Python⾥被称为条件表达式 这些表达式基于真(true)/假(not)的条件判 断 在Python 2.4以上才有了三元操作。 下⾯是⼀个伪代码和例⼦: 伪代码: 它允许⽤简单的⼀⾏快速判断,⽽不是使⽤复杂的多⾏ if 语句。 这在⼤多数时候⾮常有 ⽤,⽽且可以使代

    2023年04月27日
    浏览(74)
  • JavaScript三元运算

    JavaScript 中的三元运算符是一种简洁的条件语句,其语法结构如下: 这里的“条件”是一个布尔表达式(即其结果为 true 或 false )。如果条件为 true ,则执行并返回“表达式1”的结果;如果条件为 false ,则执行并返回“表达式2”的结果。 示例 假设我们有一个变量 age ,我

    2024年01月16日
    浏览(39)
  • 5.SpringEL三元运算

    Spring Expression Language (SpEL) 的三元运算符类似于常规编程语言中的条件(三元)运算符。在 SpEL 中,三元运算符的语法格式如下: 这个运算符的工作原理是:如果 expr1 为真(即非 null、非空集合、非 0、非 false),则返回 expr2 ;否则返回 expr3 。 以下是一个使用 SpEL 三元运算符

    2024年02月07日
    浏览(34)
  • 递增的三元子序列

    递增的三元子序列 1 = nums.length = 500000 子序列的三个元素在原数组中可以不是连续的 实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案 使用贪心算法,在遍历数组时,要记录当前数组中的最小值minVal (方便找第二小的值)以及递增二元组中的较大值tupleMaxVal (方便找递

    2024年01月23日
    浏览(37)
  • 334. 递增的三元子序列

    首先想到的方法是维护左最小值和右最大值数组,然后判断是否当前值为中间值。 看了题解后发现了一个很棒的法,时间复杂度O(N),空间复杂度O(1). 首先,维护第一第二个数两个变量,如果当前数大于第二数则存在三元组,如果大于第一数则更新第二数,否则更新第一数。

    2024年02月15日
    浏览(35)
  • js---三元表达式详解

    三元表达式是JS中最为常用的快捷判断语句之一。其语法形式为: 当判断条件成立时,返回结果1,否则返回结果2。这是JS中最为基本的三元表达式形式。 在实际应用中,三元表达式可用于快速判断三个条件,如下所示示例代码: 以上代码的意思是:当成绩大于90分时,返回

    2024年02月03日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包