重溫手冊(三):運算子

Mingo1125發表於2021-01-23

整型與浮點型的運算:

$sum = 1 + 2.0;  var_dump($sum); //float(3)
$dif = 5.0 - 1;  var_dump($dif); //float(4)
$pro = 4.0 * 3;  var_dump($pro); //float(12)
$dis = 9 / 3.0;  var_dump($dis); //float(3)
$pow = 5 ** 3.0; var_dump($pow); //float(125)
$mod = 9.0 % 2;  var_dump($mod); //int(1)
//運算過程中有浮點數的參與,除了取模,其他運算的結果都是浮點型

取模:

$mod1 = 9 % -2;
$mod2 = -9 % -2;
var_dump($mod1); //int(1)
var_dump($mod2); //int(-1)
//取模的結果和被除數的正負符號一樣

$var = '賦一個值';

$a += $b;  //配合算術運算子使用
$a &= $b;  //配合位運算子使用
$a .= $b;  //配合字串拼接符使用
$a ??= $b; //配合NULL合併運算子使用

$a = 0b1011; //11
$b = 0b0010; //2
echo decbin($a & $b);  //10(可看作0010) 位與:11得1,其他為0
echo decbin($a | $b);  //1011 位或:00得0,其他為1
echo decbin($a ^ $b);  //1001 位異或:10得1,其他為0
echo decbin(~$a);      //1111111111111111111111111111111111111111111111111111111111110100(64位) 位取反:1得0,0得1
echo decbin($a << $b); //101100 位左移:將$a(二進位制)左移動$b(十進位制)個位置,用0補上
echo decbin($a >> $b); //10 位右移:將$a(二進位制)右移動$b(十進位制)個位置,即抹去移動的位數

一般比較:

$a = 1;
$b = 2;
var_dump($a > $b);   //bool(false)
var_dump($a < $b);   //bool(true) 

$c = 3;
$d = '3';
var_dump($c == $d);  //bool(true)
var_dump($c === $d); //bool(false) 全等,型別也要相同

特殊比較:

var_dump(1 == true);     //bool(true)
var_dump(0 == false);    //bool(true)
var_dump(false < true);  //bool(true) 
var_dump(NULL < false);  //bool(false)
var_dump(NULL == false); //bool(true)
var_dump(NULL > false);  //bool(false)
var_dump(NULL < true);   //bool(true)
var_dump(NULL == true);  //bool(false)
var_dump(NULL > true);   //bool(false)
var_dump(NULL < 0);      //bool(false)
var_dump(NULL == 0);     //bool(true)
var_dump(NULL > 0);      //bool(false)
//先轉化為相同型別再進行比較,可以把true看成1,NULL和false看成0

$a = 110;
$b = empty($a) ? 120 : $a;
echo $b; //110

$temp1 = true ? 'true' : 'false';
$temp2 = false ? 'true' : 'false';
echo $temp1; //true
echo $temp2; //false

$a = 110;
$b = $a ?? 120;
echo $b; //110

$temp1 = NULL ?? 'abc';
$temp2 = '' ?? 'abc';
echo $temp1;      //abc
var_dump($temp2); //string(0) ""  只有為NULL才會選擇第二個表示式

一般情況:

$a = 2;
echo ++$a; //3 先遞增後執行

$a = 2;
echo $a++; //2 先執行後遞增
echo $a;   //3

$a = 2;
echo --$a; //1 先遞減後執行

$a = 2;
echo $a--; //2 先執行後遞減
echo $a;   //1

特殊情況;

$a = true;
var_dump(++$a); //bool(true)
$a = true;
$a++;
var_dump($a);   //bool(true)
$a = true;
var_dump(--$a); //bool(true)
$a = true;
$a--;
var_dump($a);   //bool(true)

$b = false;
var_dump(++$b); //bool(false)
$b = false;
$b++;
var_dump($b);   //bool(false)
$b = false;
var_dump(--$b); //bool(false)
$b = false;
$b--;
var_dump($b--); //bool(false)

$c = NULL;
var_dump(++$c); //int(1)
$c = NULL;
$c++;
var_dump($c);   //int(1)
$c = NULL;
var_dump(--$c); //NULL
$c = NULL;
$c--;
var_dump($c);   //NULL

//邏輯與
var_dump(true && true);     //bool(true) 雙方為true才為true
var_dump(true && false);    //bool(false)
var_dump(false && true);    //bool(false)
var_dump(false && false);   //bool(false)

//邏輯或
var_dump(true || true);     //bool(true)
var_dump(true || false);    //bool(true)
var_dump(false || true);    //bool(true)
var_dump(false || false);   //bool(false) 雙方為false才為false

//邏輯異或
var_dump(true xor true);    //bool(false)
var_dump(true xor false);   //bool(true) 雙方分別為true和false才為true
var_dump(false xor true);   //bool(true)
var_dump(false xor false);  //bool(false)

//邏輯非
var_dump(!true);            //bool(false)
var_dump(!false);           //bool(true)

$a = 'hello';
$b = 'world';
echo $a.$b; //helloworld

聯合符+:

$a = array(
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'cat'
);
$b = array(
    'd' => 'dog',
    'b' => 'banana2',
    'c' => 'cat2'
);
$res1 = $a + $b;
print_r($res1); //Array ( [a] => apple [b] => banana [c] => cat [d] => dog )
$res2 = $b + $a;
print_r($res2); //Array ( [d] => dog [b] => banana2 [c] => cat2 [a] => apple )
//如果key相同,那麼+號左邊陣列的值覆蓋+號右邊陣列的值

比較符==、===:

$a = array(
    'a' => '1', 'b' => 2
);
$b = array(
    'a' => '1', 'b' => '2'
);
$c = array(
    'b' => 2, 'a' => '1'
);
$d = array(
    'a' => '1', 'b' => 2
);
var_dump($a == $b);  //bool(true)
var_dump($a == $c);  //bool(true)
var_dump($a == $d);  //bool(true)

var_dump($a === $b); //bool(false)
var_dump($a === $c); //bool(false)
var_dump($a === $d); //bool(true) //全等的條件是鍵名鍵值順序型別一樣

大概順序:求冪 > 遞增遞減 > 邏輯非 > 算術 > 比較 > 位 > 邏輯 > 賦值
具體可參考手冊:www.php.net/manual/zh/language.ope...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章