细说php(三) 运算符与表达式

一、算术运算符    +   -  *  /  %  ++  --

<?php
	$a = 100;
	$a++;       // $a=$a+1;  先用变量再自增1
	++$a;       // $a=$a+1;  先用自增1再用变量
	$a--;       // $a=$a-1;  先用变量再自减1
	--$a;       // $a=$a-1;  先用自减1再用变量
	echo "a = ".$a."<br>";    // 100
	
	$b = $a % 3.3; // % 会把两边的数转为整数后再进行整除
	echo "b = ".$b;
?>

二、字符串运算符

<?php
	$name = "tom";
	$age = 27;
	$height = 1.75;
	
	echo "我的名字是:{$name} 我的年龄是:{$age} 我的身高是:{$height}米<br>";
	echo '我的名字是:' . $name . ' 我的年龄是:' . $age . ' 我的身高是:' . $height . '米' . '<br>';
	echo '我的名字是:' , $name , ' 我的年龄是:' , $age , ' 我的身高是:' , $height , '米' , '<br>';
?>

三、赋值运算符    =   += -= *= /= %=  .=

<?php
	$a = 10;
	$a += 10;     // $a = $a + 10;
	$a -= 10;     // $a = $a - 10;
	$a *= 10;     // $a = $a * 10;
	$a /= 10;     // $a = $a / 10;
	$a %= 10;     // $a = $a % 10;
	$a .= "abc";  // $a = $a . "abc";
?>

四、比較运算符    >  <  >= <= == ===  != 或<> !==

<?php
	/**
		===  比較时不仅要求内容同样,也要求类型同样
    	!==  比較时不仅要求内容不同样,也要求类型不同样
    **/
	$a = 100;
	if ($a === "100") {
		echo "111111111111111";
	} else {
		echo "000000000000000";
	}
?>

五、逻辑运算符    && 或and  ||或 or  ! 或not  

<?php
    // 逻辑运算符仅仅能操作bool型值, 返回的也是bool型值
    // 与Java一样&&和||也有短路的问题
    
	var_dump(true && true);   // true
	var_dump(true and false); // false
	var_dump(true || false);  // true
	var_dump(true or false);  // true
	var_dump(!false);         // true
?>

六、位运算符      &   | ^ ~   <<  >> >>>

<?php
	/***************************************************************
	 *  20          000000000  00000000 000000000 00010100
	 *  30          000000000  00000000 000000000 00011110    &
	 *  ------------------------------------------------------------
	 *              000000000  00000000 000000000 00010100    20
	 ***************************************************************/
	 
	 $a = 20;     //  16+4      00010100
	 $b = 30;     //  16+8+4+2  00011110
	 $c = $a & $b;
	 echo $c . "<br>"; // 20
	
	
	/***************************************************************
	 *  20          000000000  00000000 000000000 00010100
	 *  30          000000000  00000000 000000000 00011110    |
	 *  ------------------------------------------------------------
	 *              000000000  00000000 000000000 00011110    30
	 ***************************************************************/
	 
	 $a=20;       //  16+4      00010100
	 $b=30;       //  16+8+4+2  00011110
	 $c= $a | $b;
     echo $c . "<br>"; // 30


	/***************************************************************
	 *  20          000000000  00000000 000000000 00010100
	 *  30          000000000  00000000 000000000 00011110    ^
	 *  ------------------------------------------------------------
	 *              000000000  00000000 000000000 00001010    10
	 ***************************************************************/
	 
     $a = 20;   //  16+4      00010100
     $b = 30;   //  16+8+4+2  00011110
     $c = $a ^ $b;
     echo $c . "<br>"; // 10
     
     $c = ~$a ;
     echo $c . "<br>"; // -21
     
    /***************************************************************
     *                  00000000  00000000 000000000 000101 >> 2
     *		00000000  00000000 000000000 0001010000  << 2
     ***************************************************************/
     $c = $a << 2 ;
     echo $c . "<br>"; // 80
?>

七、其它运算符   ? :  ``  @  => -> ::  & $

<?php
	// 三目运算符
	$a = 10;
	$b = $a > 50 ? $a : 5;
	echo $b;
	
	// 运行系统命令
	$str=`ipconfig /all`;
	echo '<pre>';
	echo $str;
	echo '</pre>';
	
	// 隐藏异常信息
	@getType();
	echo "##############<br>";
?>