Php 如何切换布尔数?

Php 如何切换布尔数?,php,function,numbers,Php,Function,Numbers,这是我的密码: $num = 1; // it always is either 0 or 1 if ( $num == 1 ){ $num = 0 } else { $num = 1; } 如您所见,我的代码切换数字。这对我来说真的很难看。我猜php应该有一个这样做的函数。但经过一些搜索,我没有发现任何类似的东西。不管怎样,我能做得更标准更好吗 目前我正在为一家伟大的公司编码。这就是为什么我想编写干净、专业的代码。您的方法是正确的,也会起作用。你只需要把它包装成一个函数。另

这是我的密码:

$num = 1; // it always is either 0 or 1

if ( $num == 1 ){
    $num = 0
} else {
    $num = 1;
}
如您所见,我的代码切换数字。这对我来说真的很难看。我猜php应该有一个这样做的函数。但经过一些搜索,我没有发现任何类似的东西。不管怎样,我能做得更标准更好吗


目前我正在为一家伟大的公司编码。这就是为什么我想编写干净、专业的代码。

您的方法是正确的,也会起作用。你只需要把它包装成一个函数。另一种方法是使用来实现功能性和更干净:

function toggleNumber( $num ) {
    return $num ^= 1;
}
该函数获取数字,并使用1进行异或运算。然后将切换数字。

您只需使用即可!运算符在0和1之间切换数字


您可以直接使用$num=intval$号码;切换数字。但功能是一个好方法

这里有几个有趣的方法,如果数字是1,返回0或1

$num = 1;
function toggle1($num){
   if($num){
      return 0;
   }
   return 1;
}
无需争论,只需切换到触发器动作

function toggle2(){
    static $num = 1;
    $num = ($num?0:1);
    return $num;
}
争论不休

function toggle3($num){
    return ($num?0:1);
}
类似于@B.Desai,但转换为int

function toggle4($num){
    return (int) !$num;
}
像这个例子一样直截了当,但是

$num = 1;
$num = ($num?0:1);

简单减法。只需从1中减去当前值。这不会像按位执行的那样快,但是如果您在团队中工作,其他程序员很容易理解。性能差异将以纳秒为单位进行测量$num=1-$num是不使用条件语句的单行表达式

$num=1;

echo $num=1-$num,"\n";  // 0
echo $num=1-$num,"\n";  // 1
echo $num=1-$num;       // 0

如果你是为一家伟大的公司编码,你不想使用一个布尔数

如果您确实知道您的号码将始终为0或1,那么请使用。以下是一些原因:

再过几天/月/年,您将不得不再次运行此代码,您将看到一个数字,因此您可能会忘记隐式设置的0/1规则

如果其他人阅读了您的代码,他怎么知道这只能是0/1

当您或其他人将为此编写文档时,您真的想输入:这是一个只能为0或1的数字吗

如果您碰巧使用了布尔值,那么您所要求的切换操作要简单得多:

$value = TRUE; //TRUE is a PHP Constant

$value = !$value; //Toggled, $value is now equal to FALSE

if ($value) { } //instead of if ($num == 1)
if (!$value) { } //instead of if ($num == 0)
在文档中,您可以声明这是一个布尔值,每个人都知道只有两种可能性:TRUE或FALSE

一句话你就能做到


以下所有方法仅使用一行代码

方法1使用!接线员

方法2使用数组返回num作为索引

<?php 

  $num =1;

  $num = array(1,0)[$num];  //method 2
方法3使用条件运算符

<?php 

  $num =1;

  $num = (int) ($num < 1);  // if 1 return 0 else return 1 , method 3
方法4使用空函数进行黑客攻击

<?php 

  $num = 1;

  $num = (int)empty($num);  // method 4

另一种方法是:


布尔数?为什么不使用实际的布尔值-真/假..为什么不直接使用!方法2、3或4不建议对值进行切换。所以你没有回答这个问题。编辑了我的答案。检查一下。在以前的编辑中,我试图显示它。现在,如果num的值为1,它将变为0,反之亦然,这是上述所有函数的实现。这里还有一个已编辑代码的演示。可能包含echo,只需删除它即可。更干净的版本是$num-=1;事实上,在这种情况下,如果num最初是0,那么之后它将变成0-1=-1。这样做是行不通的,请删除我先前发布的答案的这个迟来的副本,并重新获得您丢失的代表分数。
<?php 

  $num =1;

  $num = array(1,0)[$num];  //method 2
<?php 

  $num =1;

  $num = (int) ($num < 1);  // if 1 return 0 else return 1 , method 3
<?php 

  $num = 1;

  $num = (int)empty($num);  // method 4
$num = 1 - $num;