使用!取反的问题

今天把项目上传到服务器后出现的问题,改变状态(0.1)的切换.之前的代码如下:

   public function Something()
    {
        if (IS_AJAX) {
            $id = I('post.id');
            $arrt = I('post.attr');
            $isshow = $this->product->where("id='$id'")->getField($arrt);//获取状态(1 OR 0)
            if($this->product->where("id='$id'")->setField($arrt,!$isshow)){//设置状态为反
                $info = array('i' => 1, 'msg' => "改变状态成功");
            }else{
                $info = array('i' => 0, 'msg' => "改变状态失败");
            }
            $this->ajaxReturn($info);
        }
    }

以上代码在本地测试一切正常 但是到了服务器后将0设置为1正常,但是将1设置为0的时候SQL报错 SET is_top='' 也就是!$isshow可以将1取反为0 但是无法将0取反为1,结果为 ' '
后来不得已将$isshow使用三元赋值$isshow=$isshow==1?0:1;抛弃了之前的!$isshow的写法.bug解决了

疑问主要是?

为什么在linux环境下面 !$isshow取反可以由0取到1 但是1取到0则无法取出来呢?请大佬解答,新手一个谢谢大家.

阅读 2.3k
1 个回答

使用布尔值来回转换时要小心,手册说:

布尔值TRUE值转换为字符串“1”。Boolean FALSE转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

这是转换为字符串时的默认行为, 如果期望整形的0, 需要强制转换一下.

<?php

$nshow=1;
echo $nshow."\n";
echo !$nshow."\n";
echo (int)!$nshow."\n";

将会输出

1

0

注意上面的空行.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题