基本概念
運(yùn)算符是配合一個(gè)或多個(gè)值來(lái)產(chǎn)生結(jié)果的東西。
例如數(shù)字 1
和 2
,配合一個(gè)加號(hào) +
,就能得到結(jié)果 3
,這里的加號(hào)就是一個(gè)運(yùn)算符。
這里還有一個(gè)概念就是表達(dá)式,所有能被進(jìn)行賦值的語(yǔ)句都可以算是一個(gè)表達(dá)式,看下面代碼:
$sum = 1 + 2;
代碼中的這一整行稱(chēng)之為語(yǔ)句,在這個(gè)實(shí)例中也可以叫賦值語(yǔ)句,一條語(yǔ)句通常用分號(hào)(;)結(jié)尾,而其中 1 + 2
便是一個(gè)表達(dá)式,而 表達(dá)式的目的是得到一個(gè)值。
算術(shù)運(yùn)算符
// 定義變量
$a = 10;
$b = 5;
// 取反 結(jié)果為 -10
echo -$a;
// 多次取反 結(jié)果 10
echo -(-$a);
// 加減乘除 結(jié)果 20
echo $a + $b * $a / $b;
// 取模,也叫取余,獲取余數(shù) 結(jié)果 0
echo $a % $b;
// 次冪 求 $a 的 $b 次冪 結(jié)果 10 * 10 * 10 * 10 * 10 = 100000
echo $a ** $b;
除法運(yùn)算符通常會(huì)得到一個(gè)浮點(diǎn)數(shù)的值,除非兩個(gè)操作數(shù)剛好能整除。
取模運(yùn)算符在計(jì)算之前,會(huì)將操作數(shù)都轉(zhuǎn)成整數(shù)型,且結(jié)果的正負(fù)數(shù)是根據(jù)被除數(shù)(左邊的那個(gè))來(lái)決定。
賦值運(yùn)算符
位運(yùn)算符
暫無(wú):2017-6-22 13:55:21
比較運(yùn)算符
三元運(yùn)算符
格式:(表達(dá)式1) ? (表達(dá)式2) : (表達(dá)式3)
例如:$str = true ? 'hello' : 'world'
;
說(shuō)明:如果 表達(dá)式1
為 TRUE
,則返回 表達(dá)式2
的結(jié)果,否則就返回 表達(dá)式3
的結(jié)果。
三元運(yùn)算符的計(jì)算方式是 從左至右,這在多個(gè)三元運(yùn)算符的嵌套中表現(xiàn)得很明顯。
三元運(yùn)算符也有簡(jiǎn)寫(xiě)方式。
格式:(表達(dá)式1) ?: (表達(dá)式2)
說(shuō)明:如果 表達(dá)式1
為 TRUE
,則返回 表達(dá)式1
的結(jié)果,反之返回 表達(dá)式2
的結(jié)果。
錯(cuò)誤控制運(yùn)算符
錯(cuò)誤控制運(yùn)算符@
,可以將其放在一個(gè)表達(dá)式前,意思是說(shuō)該表達(dá)式產(chǎn)生的任何錯(cuò)誤都將被忽略(同時(shí)返回0
,非常適合應(yīng)用于邏輯運(yùn)算)。
執(zhí)行運(yùn)算符
PHP支持使用反引號(hào)(\
` )表示的執(zhí)行運(yùn)算符,反引號(hào)里的內(nèi)容將會(huì)被當(dāng)做
shell命令來(lái)執(zhí)行,使用反引號(hào)運(yùn)算符與使用
shell_exec()函數(shù)的效果一樣。 但如果在激活了安全模式或關(guān)閉了
shell_exec()`函數(shù)時(shí)是無(wú)效的。
反引號(hào)不能在雙引號(hào)字符串中使用。
$host = 'http://127.0.0.1';
echo `ping -n 3 {$host}`;
遞增/遞減運(yùn)算符
遞增運(yùn)算符(++
):
$num = 5;
// 5
echo $num++;
// 7
echo ++$num;
遞增運(yùn)算符可以運(yùn)用在變量前面或后面,在前面的時(shí)候,表示立即將該變量的值加一,在后面的時(shí)候,表示下次再加。
遞減運(yùn)算符(--
):
$num = 5;
// 5
echo $num--;
// 3
echo --$num;
用法與遞增一樣,區(qū)別只是一個(gè)加,一個(gè)減。
對(duì) NULL
執(zhí)行遞減沒(méi)有效果,遞增則返回 1
。
對(duì)純字母 String
執(zhí)行遞減沒(méi)有效果。
對(duì)合法數(shù)字型 String
執(zhí)行遞增或遞減之前會(huì)轉(zhuǎn)成數(shù)值型。
對(duì)其他四不像的 String
執(zhí)行遞增或遞減沒(méi)有效果。
對(duì) Boolean
執(zhí)行遞增或遞減沒(méi)有效果
邏輯運(yùn)算符
字符串運(yùn)算符
將多個(gè)字符串拼接在一起,通過(guò)小數(shù)點(diǎn)(.
)來(lái)進(jìn)行,而小數(shù)點(diǎn)正是PHP里的字符串運(yùn)算符,也可以使用連接賦值運(yùn)算符(.=
)。
$foo = 'hello';
$bar = 'world';
// hello world;
$foobar = $foo . ' ' . $bar;
// foo = helloworld
$foo .= $bar;
數(shù)組運(yùn)算符
數(shù)組與數(shù)組之間可以進(jìn)行比較,也可以聯(lián)合合并成一個(gè)。
聯(lián)合的時(shí)候,兩者如果有相同鍵名,則忽略后者取前者的。
// 定義數(shù)組
$foo = ['1' => 'php', 'b' => 'asp', 'c' => 468];
$bar = [1 => 'php', 'b' => 'asp', 'c' => '468'];
// 是否相等,需要成員個(gè)數(shù)相同、順序相同、鍵值相同
$foo == $bar; // true
// 是否絕對(duì)相等、同上且鍵值類(lèi)型必須相同
$foo === $bar; // false
// 是否不等、與是否相等相反
$foo != $bar; // false
$foo <> $bar; // false
// 是否絕對(duì)不等、與是否絕對(duì)相等相同
$foo !== $bar; // true
// 定義數(shù)組
$foo = ['x' => 'mysql', 'y' => 'redis'];
$bar = ['x' => 'sqlserver', 'y' => 'mongodb', 'z' => 'memcache'];
/*
Array
(
[x] => mysql
[y] => redis
[z] => memcache
)
*/
// 數(shù)組聯(lián)合
$foo + $bar;
類(lèi)型運(yùn)算符
PHP中判斷一個(gè)實(shí)例對(duì)象是否是另一個(gè)實(shí)例、類(lèi)、父類(lèi)、接口的實(shí)現(xiàn),可以用 instanceof
關(guān)鍵字,是則返回 TRUE
,反之則返回 FALSE
,如果要檢查的類(lèi)名不存在,也會(huì)返回 FALSE
。
// 普通檢查
class Foo{}
$foo = new Foo();
// true
$foo instanceof Foo;
// false
$foo instanceof stdClass;
// 繼承檢查
class Bar extends Foo{}
$bar = new Bar();
// true
$bar instanceof Bar;
// true
$bar instanceof Foo;
// 接口檢查
interface Face{};
class Foobar implements Face{};
$foobar = new Foobar();
// true
$foobar instanceof Foobar;
// true
$foobar instanceof Face;
// 類(lèi)名可以是變量
$className = 'Foobar';
// true
$foobar instanceof $className;
// 類(lèi)名也可以不存在
// false
$foobar instanceof PHP;
參考例子
例子1
// $x = TRUE
$x = TURE AND FALSE;
// $y = FALSE
$y = (TRUE AND FALSE);
// 這個(gè)例子的關(guān)鍵點(diǎn)是運(yùn)算符優(yōu)先級(jí)
// 因?yàn)?= 優(yōu)先級(jí)高于 AND ,所以$x = TRUE