Skip to content

Latest commit

 

History

History
167 lines (125 loc) · 4.58 KB

4-PHP运算符.md

File metadata and controls

167 lines (125 loc) · 4.58 KB

PHP运算符

PHP也跟其他语言差不多,有 算术运算符逻辑运算符按位运算符比较运算符三目运算符=赋值运算符@错误控制符执行运算符字符串运算符数组运算符类型运算符 以及递增递减运算符

1、算术运算符

+ - * / % **
**:幂运算,如2**3 = 8
优先级: ** 》 */% 》+-

2、逻辑运算符

&& || and or xor !
xor:逻辑异或,0 1或1 0都为真
! $a:逻辑非,如果 $a 不为 TRUE
优先级:&& 》 || 》and 》  xor 》 or
短路作用

3、按位运算符

& | ^ ~  << >>
^:按位异或 ,0 1或1 0都为1
~ $a:按位取反 将 $a 中为 0 的位设为 1,反之亦然
$a << $b:将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)
$a >> $b:将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)

4、比较运算符

> >= < <= == ===  ?:三目运算符

$a > $b ? true : false;

==和===区别:
  ==比较的是值,===则是比较值和类型

5、赋值运算符=

=  赋值运算符
&= 引用赋值运算符
$a = 1;
$b = &$a;

6、错误控制符@

@:加在表达式前面,会忽略该表达式产生的所有错误

7、递增递减运算符

++ --
++$a : 先加加,后返回
$a++ : 先返回,再加加
--$a : 先减减,再返回
$a-- : 先返回,再减减

Boolean类型递增递减运算不会影响原来的值,即true++ -- ,false++ -- 都是原来的值
NULL++:值为1
NULL--:值为NULL

8、执行运算符 反引号 ``

`` : 将命令执行结果以字符串形式返回,里面的变量可以被解析
PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的
<?php

echo `ls -al`;
echo shell_exec('ls -al');

$dir = '.';
echo `ls ${dir}\n`;

9、字符串运算符(拼接)

 . .=
 
 如果字符串有多个变量,也可以使用,来拼接字符串,而且性能会更高;这是因为字符串使用.来拼接时,PHP首先会创建一个新的字符串,然后将变量值加入到新字符串;而,则是直接拼接返回。

10、数组运算符

 + == === != <> !==
 
 $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

11、类型运算符

 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

12、运算符优先级

递增递减 > !(逻辑非) > 算术运算符 > 大小比较运算符 > 等值比较运算符 > 引用运算符 > ^(按位异或) > |(按位或) > && > || 三目 > 赋值 > and > xor > or

13、面试真题

<?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
     }