PHP也跟其他语言差不多,有
算术运算符
、逻辑运算符
、按位运算符
、比较运算符
、三目运算符
、=赋值运算符
、@错误控制符
、执行运算符
、字符串运算符
、数组运算符
、类型运算符
以及递增递减运算符
+ - * / % **
**:幂运算,如2**3 = 8
优先级: ** 》 */% 》+-
&& || and or xor !
xor:逻辑异或,0 1或1 0都为真
! $a:逻辑非,如果 $a 不为 TRUE
优先级:&& 》 || 》and 》 xor 》 or
短路作用
& | ^ ~ << >>
^:按位异或 ,0 1或1 0都为1
~ $a:按位取反 将 $a 中为 0 的位设为 1,反之亦然
$a << $b:将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)
$a >> $b:将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)
> >= < <= == === ?:三目运算符
$a > $b ? true : false;
==和===区别:
==比较的是值,===则是比较值和类型
= 赋值运算符
&= 引用赋值运算符
$a = 1;
$b = &$a;
@:加在表达式前面,会忽略该表达式产生的所有错误
++ --
++$a : 先加加,后返回
$a++ : 先返回,再加加
--$a : 先减减,再返回
$a-- : 先返回,再减减
Boolean类型递增递减运算不会影响原来的值,即true++ -- ,false++ -- 都是原来的值
NULL++:值为1
NULL--:值为NULL
`` : 将命令执行结果以字符串形式返回,里面的变量可以被解析
PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的
<?php
echo `ls -al`;
echo shell_exec('ls -al');
$dir = '.';
echo `ls ${dir}\n`;
. .=
如果字符串有多个变量,也可以使用,来拼接字符串,而且性能会更高;这是因为字符串使用.来拼接时,PHP首先会创建一个新的字符串,然后将变量值加入到新字符串;而,则是直接拼接返回。
+ == === != <> !==
$a + $b 联合 $a 和 $b 的联合。如有相同键名,则取左边键名。
$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。
<?php
$a = array("apple", "banana");
$b = array(1 => "banana", 0 => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false) 必须键值、类型、顺序一致才为true
instanceof,判断对象是否某个类的实例或者实现了某个接口
<?php
interface Animal {
public function eat();
}
class Cat implements Animal{
public function eat(){
echo 'cat eat';
}
}
$a = new Cat;
echo $a instanceof Animal ? 'YES':'NO';//YES
echo $a instanceof Cat ? 'YES':'NO';//YES
递增递减 > !(逻辑非) > 算术运算符 > 大小比较运算符 > 等值比较运算符 > 引用运算符 > ^(按位异或) > |(按位或) > && > || 三目 > 赋值 > and > xor > or
<?php
$a = 0;
$b= 0;
//运算符优先级问题。优先级相同时从左往右运算
//递增递减 > ! > 算术运算符 > 大小比较运算符 > 等值比较运算符> 引用运算符 > ^ > | > && > || > 三目 > = > and >xor > or
//整个执行流程
//优先级:
// 【>】 > 【||】 > 【=】
// $a = (3 > 0) || $b = 3 > 0
// $a = true || $b = (3 > 0)
// $a = true || $b = true
// $a = (true || $b = true) //短路作用,b还是0
// $a = true $b = 0
//
// $a++ => true++ => true
// $b++ => 1
//
if ($a = 3 > 0 || $b = 3 > 0){
var_dump($a,$b);
$a++;
$b++;
echo $a."\n"; //1
echo $b."\n"; //1
}