gpt4 book ai didi

php - PHP 中的 bool 赋值运算符

转载 作者:IT王子 更新时间:2023-10-29 00:06:05 25 4
gpt4 key购买 nike

我发现自己经常做这种事情:

$foo = true;
$foo = $foo && false; // bool(false)

对于按位运算符,您可以使用&=|= 简写:

$foo = 1;
$foo &= 0; // int(0)

鉴于 10 的位运算在功能上等同于 truefalse 的 bool 运算,我们可以依靠类型转换并做这样的事情:

$foo = true;
$foo &= false; // int(0)
$foo = (bool)$foo; // bool(false)

...但这非常丑陋并且违背了使用速记赋值语法的目的,因为我们必须使用另一个语句将类型恢复为 bool 值。

我真正想做的是这样的:

$foo = true;
$foo &&= false; // bool(false)

...但是 &&=||= 显然不是有效的运算符。所以,我的问题是 - 是否有其他一些含糖语法或者可能作为替代的模糊核心功能?对于像 $foo 这样短的变量,仅使用 $foo = $foo && false 语法没什么大不了的,但是具有多个维度的数组元素和/或对象方法调用会使语法非常冗长。

最佳答案

在某种程度上你已经回答了你自己的问题:

bitwise operations on 1 and 0 are functionally equivalent to boolean operations on true and false

请记住,PHP 是一种弱类型语言,因此没有必要将严格的 bool 值类型转换为 10 等同于 truefalse(严格相等除外,见下文)。

使用您的示例考虑以下代码:

$foo = true;
$foo &= false;

if (!$foo) {
echo 'Bitwise works!';
}

$bar = true;
$bar = $bar && false;

if (!$bar) {
echo 'Boolean works!';
}

// Output: Bitwise works!Boolean works!

鉴于 PHP 的 implicit type juggling , falsy values , 并且 strict equaltiy 除外,我很难看出 &&=||= 的这种速记操作在哪里不会产生与 &=|=。尤其是在计算 bool 值时。这可能是 PHP 中不存在此类简写的原因。

更新

一些快速基准测试证明它们确实是等效的,除了真实数组/对象:

<?php
$values = array(false, 0, 0.0, "", "0", array(), 12, "string", array(1));

foreach ($values as $value) {
$bit_test = true;
$bit_test &= $value;

$bool_test = true;
$bool_test = $bool_test && false;
if ($bit_test != $bool_test) {
echo 'Difference for: ';
var_dump($value);
}
}

// Output:
// Difference for: array(1) {
// [0]=>
// int(1)
// }

关于php - PHP 中的 bool 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com