PHP 的逻辑运算符可以像 JavaScript 一样工作吗?

发布于 2024-10-21 05:56:50 字数 393 浏览 2 评论 0原文

我最喜欢 JavaScript 的一件事是逻辑运算符非常强大:

  • && 可以用来安全地提取对象字段的值,并且会返回 null如果对象或字段尚未初始化

    // 如果 param、param.object 或 param.object.field 返回 null
    // 尚未设置
    字段=参数&& param.object &&参数.对象.字段;
    
  • || 可用于设置默认值:

    // 将参数设置为其默认值
    参数 = 参数 ||默认值;
    

PHP 是否也允许使用逻辑运算符?

One of the things I like the most of JavaScript is that the logical operators are very powerful:

  • && can be used to safely extract the value of an object's field, and will return null if either the object or the field has not been initialized

    // returns null if param, param.object or param.object.field
    // have not been set
    field = param && param.object && param.object.field;
    
  • || can be used to set default values:

    // set param to its default value
    param = param || defaultValue;
    

Does PHP allow this use of the logical operators as well?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

再见回来 2024-10-28 05:56:50

PHP 返回 truefalse。但你可以模拟 JavaScript 的 r = a ||乙|| c with:

$r = $a ?: $b ?: $c;

关于“ands”,类似:

$r = ($a && $a->foo) ? $a->foo->bar : null;

PHP returns true orfalse. But you can emulate JavaScript's r = a || b || c with:

$r = $a ?: $b ?: $c;

Regarding 'ands', something like:

$r = ($a && $a->foo) ? $a->foo->bar : null;
油焖大侠 2024-10-28 05:56:50

PHP 逻辑运算符不会返回任何一边的值:它们总是会为您返回一个布尔值。

例如,执行:

$result = $a && $b;

将始终使 $result 包含布尔值:truefalse ——而绝不会 $a > 也不是$b

PHP logical operators do not return the value on any of their sides : they will always get you a boolean.

For instance, doing :

$result = $a && $b;

Will always make $result contain a boolean : true or false -- and never $a nor $b.

变身佩奇 2024-10-28 05:56:50

您可以使用三元运算符。

You can set up similar functionality using ternary operators.

淡淡の花香 2024-10-28 05:56:50

修订

关于 PHP 中的逻辑 AND 以获得与 JavaScript 相同的结果,您可以使用传统三元的变体,如下所示:

<?php
    // prelim
    $object = new stdClass;
    $object->field = 10;
    $param = new stdClass;
    $param->object = $object;

    // ternary variant     
    $field = !($param && $param->object)?:  $param->object->field;
    echo $field,"\n";

    // alternative to ANDing
    $field = get_object_vars( $param->object )["field"] ?? null;
    echo $field,"\n";

请参阅 实时代码

“Elvis”运算符“?:”仅在条件表达式为 false 时才将结果分配给 $field。因此,如果 $param 以及 $param->object 都存在,那么您必须使用 NOT 运算符(“!”)才能获得所需的结果。

您还可以通过利用 PHP 7 中的空合并运算符(“??”)与 get_object_vars() 配合使用来实现无需 AND 运算即可获取字段数据的目标。

Revised:

With respect to logical ANDing in PHP to achieve the same kind of result as JavaScript, you could use a variant of the traditional ternary, as follows:

<?php
    // prelim
    $object = new stdClass;
    $object->field = 10;
    $param = new stdClass;
    $param->object = $object;

    // ternary variant     
    $field = !($param && $param->object)?:  $param->object->field;
    echo $field,"\n";

    // alternative to ANDing
    $field = get_object_vars( $param->object )["field"] ?? null;
    echo $field,"\n";

See live code

The "Elvis" operator "?:" only assigns the result to $field if the conditional expression is false. So, if $param exists as well as $param->object, then you have to use the NOT operator ("!") in order to get the desired result.

You may also accomplish the objective of getting the field data without ANDing by utilizing the null coalescing operator ("??") in PHP 7 in tandem with get_object_vars().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文