php中運算子使用方法總結

來源:互聯網
上載者:User

算術運算子

1、算術運算子:+、-、*、/、%。

2、遞增/遞減運算子:如$a++,$a--,++$a,--$a.

如:

 代碼如下 複製代碼

<?php
$a=10;
$b=5;
$c=$a++; //先賦值,後自增。$c=$a,$a=$a+1
$d=$b--; //先賦值,後自減。$d=$b,$b=$a-1
echo '$a='.$a."||".'$c='.$c.'<br/>'; //$a=11,$c=10
echo '$b='.$b."||".'$d='.$d.'<br/>'; //$b=4,$d=5
?>

<?php
$a=10;
$b=5;
$c=++$a; //先自增,後賦值。$a=$a+1,$c=$a
$d=--$b; //先自減,後賦值。$b=$a-1, $d=$b
echo '$a='.$a."||".'$c='.$c.'<br/>'; //$a=11,$c=11
echo '$b='.$b."||".'$d='.$d.'<br/>'; //$b=4,$d=4
?>

三元運算子

(expr1) ? (expr2) : (expr3);
解釋:如果條件“expr1”成立,則執行語句“expr2”,否則執行“expr3”。


以下語句的文法是正確的,它們以小解引號的方式忽略了第二或第三“元”:

 代碼如下 複製代碼
$a>$b ? print "Yes" : "";
$a>$b ? '': print 'No';

應該注意的是:在使用三元運算子時,建議使用print語句替代echo語句。

注意下列一串語句的理解:

 代碼如下 複製代碼

$str = $_GET['abc'] ? 'wangjinbo' : 'wjb';

這裡不能理解為:當$str等於$_GET['abc']  時,賦值為 'wangjinbo'  否則賦值為 'wjb';因為一:判斷相等應該用==;因原二:三元算符的文法是如上所示:(expr1) ? (expr2) : (expr3),顯然上面的二元,三元'wangjinbo'或'wjb'不能單獨構成一個有意義的運算式;

正確理解是:當$_GET['abc']為空白(也就是否,PHP中 '',null,0,undifine,都等效布爾值false)時,將$str賦值為'wangjinbo',否則賦值為'wjb';

邏輯運算子:

如:

 代碼如下 複製代碼

$a=10;$b=7;
if($a++>8 || $b++>7){ //$a++>8為真,$b++>7這個就不執行了
echo 'OK!';
}
echo 'a='.$a.'b='.$b; // 輸出OK,a=11,b=7

改變一下

$a=10;$b=7;
if($a++>10 && $b++>7){ //$a++>8為假,$b++>7這個就不執行了
echo 'OK!';
}
echo 'a='.$a.'b='.$b; // a=11,b=7

細節:and && 都表示邏輯與 ,他們的區別在什麼地方?

主要體現在優先順序上面

and 的優先順序

 代碼如下 複製代碼
and< = <&&
or < = < ||
如:
$a=false || true; //&& > = > and ;先比較false || true,再賦值
$b=false or true; //|| > = > or ;先賦值$b=false,再比較,所以結果是false
var_dump($a,$b); //bool(true) bool(false)


位元運算符

位移在 PHP 中是數學運算。向任何方向移出去的位都被丟棄。左移時右側以零填充,符號位被移走意味著加號或減號不被保留。右移時左側以符號位填充,意味著加號或減號被保留。

要用括弧確保想要的優先順序。例如 $a & $b == true 先進行比較再進行按位與;而 ($a & $b) == true 則先進行按位與再進行比較。

要注意資料類型的轉換。如果左右參數都是字串,則位元運算符將對字元的 ASCII 值進行操作。

 PHP 的 ini 設定 error_reporting 使用了按位的值,
提供了關閉某個位的真執行個體子。要顯示除了提示層級
之外的所有錯誤,php.ini 中是這樣用的:
E_ALL & ~E_NOTICE
     

具體運作方式是先取得 E_ALL 的值:
00000000000000000111011111111111
再取得 E_NOTICE 的值:
00000000000000000000000000001000
然後通過 ~ 將其取反:
11111111111111111111111111110111
最後再用按位與 AND(&)得到兩個值中都設定了(為 1)的位:
00000000000000000111011111110111
     

另外一個方法是用按位異或 XOR(^)來取得只在
其中一個值中設定了的位:
E_ALL ^ E_NOTICE
     

error_reporting 也可用來示範怎樣置位。只顯示錯誤和可恢複
錯誤的方法是:
E_ERROR | E_RECOVERABLE_ERROR
     
也就是將 E_ERROR
00000000000000000000000000000001
和 E_RECOVERABLE_ERROR
00000000000000000001000000000000
用按位或 OR(|)運算子來取得在任何一個值中被置位的結果:
00000000000000000001000000000001

Example #1 整數的 AND,OR 和 XOR 位元運算符

 代碼如下 複製代碼

<?php
/*
 * Ignore the top section,
 * it is just formatting to make output clearer.
 */

$format = '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
        . ' %3$s (%4$2d = %4$04b)' . "n";

echo <<<EOH
 ---------     ---------  -- ---------
 result        value      op test
 ---------     ---------  -- ---------
EOH;


/*
 * Here are the examples.
 */

$values = array(0, 1, 2, 4, 8);
$test = 1 + 4;

echo "n Bitwise AND n";
foreach ($values as $value) {
    $result = $value & $test;
    printf($format, $result, $value, '&', $test);
}

echo "n Bitwise Inclusive OR n";
foreach ($values as $value) {
    $result = $value | $test;
    printf($format, $result, $value, '|', $test);
}

echo "n Bitwise Exclusive OR (XOR) n";
foreach ($values as $value) {
    $result = $value ^ $test;
    printf($format, $result, $value, '^', $test);
}
?>
以上常式會輸出:

 ---------     ---------  -- ---------
 result        value      op test
 ---------     ---------  -- ---------
 Bitwise AND
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)

 Bitwise Inclusive OR
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 Bitwise Exclusive OR (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

比較子

如果比較一個數字和字串或者比較涉及到數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。此規則也適用於 switch 語句。當用 === 或 !== 進行比較時則不進行類型轉換,因為此時類型和數值都要比對。

 代碼如下 複製代碼

<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

switch ("a") {
case 0:
    echo "0";
    break;
case "a": // never reached because "a" is already matched with 0
    echo "a";
    break;
}
?>

 

對於多種類型,比較子根據下表比較(按順序)。

比較多種類型
運算數 1 類型 運算數 2 類型 結果
null 或 string string NULL 轉換為 "",進行數字或詞彙比較
bool 或 null 任何其它類型 轉換為 bool,FALSE < TRUE
object object 內建類可以定義自己的比較,不同類不能%
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.