PHP入門之型別與運算子(一)

雪痕*發表於2020-07-26

前言

PHP對於大部分人來說,是比較容易入門的。筆者也是剛學習不久,所以就把自己學習的基礎知識進行總結和整理。第一部分是型別與運算子。如果你想學習PHP,可以參考PHP學習手冊學習,任何一本教學資料也沒有PHP學習手冊講的詳細。傳送門(提取碼2dq2):PHP學習手冊

型別

PHP支援8種原始型別,包括boolean(布林型)、integer(整型)、float(浮點型,也稱作 double)、string(字串)、array(陣列)、object(物件)、resource(資源)、NULL(無型別),還有三種偽型別。這裡主要講解前四種標量型別。PHP不用提前定義資料型別,它會自己識別。

整型

整型數的字長和平臺有關,儘管通常最大值是大約二十億(32 位有符號)。64 位平臺下的最大值通常是大約 9E18。PHP 不支援無符號整數。Integer 值的字長可以用常量 PHP_INT_SIZE來表示,自 PHP 4.4.0 和 PHP 5.0.5後,最大值可以用常量 PHP_INT_MAX 來表示。可以用下面的程式碼證明一下。

<?php
$a=12345;
echo "a的值為".$a;
echo '</br>';
echo "位元組為".PHP_INT_SIZE;
echo '</br>';
echo "最大值為".PHP_INT_MAX;
echo '</br>';
echo var_dump($a);
?>

執行結果為:

如果給定的一個整數,溢位了整數的範圍,將直接會解釋成float。

布林型

布林型細節
最簡單的型別,true和false代表真和假。
當轉換為 布林 時,以下值被認為是 false:
• 布林值 false 本身
• 整型值 0(零)
• 浮點型值 0.0(零)
• 空字串,以及字串 "0"
• 不包括任何元素的陣列
• 不包括任何成員變數的物件(僅 PHP 4.0 適用)
• 特殊型別 NULL(包括尚未賦值的變數)
• 從空標記生成的 SimpleXML 物件
除了上面那些,其他的所有值都會被認為是true。

浮點型

精度為14個位元組,從左邊不是零的一個開始算起。
比如、
$a=0.123444555666666666;
echo "a的值為".$a;
輸出的值為:a的值為0.12344455566667
當到第14位數時,它會自動四捨五入。

字元型

字元型最大可以達到 2GB。
需要注意的一點是區分單引號和雙引號。用雙引號定義的字串最重要的特徵是變數會被解析。舉個例子。

$b=123;
echo "hello$b";
echo 'hello$b';     #結果為 hello123  hello$b

運算子

運算子是可以通過給出的一或多個值(用程式設計行話來說,表示式)來產生另一個值(因而整個結構成為一個表示式)的東西。下面對幾種常用的運算子進行詳細說明。

遞增/遞減運算子

舉個例子

$i=10;
$i=++$i;    # ++在前,先++然後在賦值。所以輸出的結果為11.
$i=i++;    # ++在後,先賦值,然後在++。所以輸出的值為10.  //這裡注意的是,++和--的物件是變數!!比如$a=++3就是錯的!!
echo 'i的值為'.$i

--i和i--同樣的道理。

算術運算子

$a + $b 加法 $a 和 $b 的和。
$a - $b 減法 $a 和 $b 的差。
$a * $b 乘法 $a 和 $b 的積。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 取模 $a 除以 $b 的餘數。
這些就不舉例子了。還有$a+、$a-、$a*、$a/、$a%、(左加、左減、左乘、左除、左取餘)。
舉個例子。

$a=10;
$a-=2;
echo 'a的值為'.$a;  #執行結果為:a的值為8  $a-=2就相當於$a=10-2;

比較運算子

$a == $b 等於 TRUE,如果型別轉換後 $a 等於 $b。
$a === $b 全等 TRUE,如果 $a 等於 $b,並且它們的型別也相同。
$a != $b 不等 TRUE,如果型別轉換後 $a 不等於 $b。
$a <> $b 不等 TRUE,如果型別轉換後 $a 不等於 $b。
$a !== $b 不全等 TRUE,如果 $a 不等於 $b,或者它們的型別不同。
$a < $b 小與 TRUE,如果 $a 嚴格小於 $b。
$a > $b 大於 TRUE,如果 $a 嚴格大於 $b。
$a <= $b 小於等於 TRUE,如果 $a 小於或者等於 $b。
$a >= $b 大於等於 TRUE,如果 $a 大於或者等於 $b。
$a <=> $b 結合比較運算子 當$a小於、等於、大於than $b時分別返回一個小於、等於、大於0的integer 值。 PHP7開始提供.
$a ?? $b ?? $c NULL 合併操作符 從左往右第一個存在且不為 NULL 的運算元。如果都沒有定義且不為 NULL,則返回 NULL。PHP7開始提供

邏輯運算子

  • $a and $b And(邏輯與) TRUE,如果 $a 和 $b 都為 TRUE。
  • $a or $b Or(邏輯或) TRUE,如果 $a 或 $b 任一為 TRUE。
  • $a xor $b Xor(邏輯異或) TRUE,如果 $a 或 $b 任一為 TRUE,但不同時是。
  • ! $a Not(邏輯非) TRUE,如果 $a 不為 TRUE。
  • $a && $b And(邏輯與) TRUE,如果 $a 和 $b 都為 TRUE。
  • $a || $b Or(邏輯或) TRUE,如果 $a 或 $b 任一為 TRUE。
    and 和 &&都是邏輯與,區別是&&優先順序高於and,and的優先順序比賦值運算子還要低。
    舉個例子。
$a= false&&true;
$b= true and false;
var_dump($a,$b);              #執行結果:bool(false) bool(true) $a=false$b=true
if ($a==false){               #因為,and的優先順序低於“=”所以$b先進行了賦值。
    echo '$a=false';     
}
if ($b==true){
    echo '$b=true';
}

||和or都是邏輯或,區別是||優先順序高於or,or的優先順序比賦值運算子還要低。
舉個例子。

$a= true||false;
$b= false or true;
var_dump($a,$b);              #執行結果:bool(true) bool(false) $a=true$b=false
if ($a==true){                #因為,or的優先順序低於“=”所以$b先進行了賦值。
echo '$a=true';
}
if ($b==false){
    echo '$b=false';
}

字串運算子

有兩個字串(string)運算子。第一個是連線運算子("."),它返回其左右引數連線後的字串。第二個是連線賦值運算子(".="),它將右邊引數附加到左邊的引數之後。
舉個例子。

$a = "Hello ";         #執行結果為 Hello World!
$b = $a . "World!"; 
echo "$b";
$a = "Hello ";
$a .= "World!";       #執行結果為 Hello World!
echo "$a";  

這裡不僅可以連線字串,如果是數字的話也會當作字串去連線。
比如 $a=123;$b=456;echo $a.$b;
結果為:123456

三元運算子

格式:表示式1?表示式2:表示式3
含義:如果表示式1為真,執行表示式2,如果表示式1為假,則執行表示式3。
舉個例子:

$a=2;
$b=3;
$c=$a<$b?"b大於a":"a大於b";
echo '$a='.$a,'<br/>','$b='.$b,'<br/>',$c;  #表示式2和表示式3可以是數,也可以是字串,也可以是一個式子。

輸出結果為:
$a=2
$b=3
b大於a

型別運算子

instanceof 用於確定一個 PHP 變數是否屬於某一類 class 的例項
舉個例子
class A{}
class B{}
$a=new A;
var_dump($a instanceof A);
var_dump($a instanceof B);
輸出結果為:
bool(true) bool(false) //第一個為真,第二個為假。所以$a屬於A類。

運算子優先順序

這裡直接參考的PHP學習手冊,按照優先順序,由高到低列出下表。

小結

第一部分總結了PHP的一些資料型別和運算子。在下一部分中,會總結一些流程控制,包括分支控制、迴圈控制等。

相關文章