Php 前++和后++区别 趣味题

php 前++和后++区别 趣味题

  • 前++ 先自增在返回

    1
    2
    3
    4
    5
    6
    7
    $y = 0;
    $y = ++$y;
    var_dump($y); //1

    $y = 0;
    $i=$y+1;$y=$i;
    var_dump($y); //1
  • 后++ 先返回再自增

    1
    2
    3
    4
    5
    6
    7
    $y = 0;
    $y = $y++;
    var_dump($y); //0

    $i = 0;
    $y=$i;$i=$i+1;
    var_dump($y); //0
  • 趣味题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $count = 5;
    function get_count() {
    static $count = 0;
    $res = $count++;
    return $res;
    }
    ++$count;
    get_count();
    echo get_count(); // 1 //原因 先返回后自增
  • 自动类型转换判断

    1
    2
    3
    4
    5
    6
    7
    8
    $arr = array(0=>1,"aa"=>2, 3, 4);

    foreach($arr as $key=>$val){
    print($key == "aa" ? 5 : $val);
    }
    //5534
    var_dump(0 == 'aa'); //bool(true)
    var_dump('0' == 'aa'); //bool(false)

    在PHP中两个值进行逻辑判断时,如果两个值的类型不一致PHP会自动把右边的值转换到左边的类型,然后再进行判断。因此”aa”转换整形等于0,自然也就等于左边的0了,相反如果将0换成字符串,就不会隐式转换类型了,比较自然不相同了。

  • printf

    1
    2
    $i='11';
    printf("%d\n",printf("%d",printf("%d",$i))); //1121

    printf不仅是打印函数,而且返回字符串长度

    1
    2
    3
    4
    $res = printf('%d',11);
    var_dump($res); //2
    $res = printf('%d',1);
    var_dump($res); //1
  • if语句

    1
    2
    3
    4
    5
    6
    7
    $a = 3;
    $b = 5;
    if($a = 5 || $b = 7) {
    $a++;
    $b++;
    }
    echo $a . " " . $b; //1 6
    • 1、注意=号赋值 非==判断
    • 2、 注意 if 语句这里 $a=5 ,这里的$a是bool类型
  • count

    1
    2
    $a = count ("567")  + count(null) + count(false);
    echo $a;
    • count 不同类型返回值,null为0,false为1
    1
    2
    3
    var_dump(count("567")); //1
    var_dump(count(null)); //0
    var_dump(count(false)); //1