php中的操作符分为以下几大类:
算术操作符
跟其它编程语言类似,算术操作符包含加(+
)、减(-
)、乘(*
)、除(/
)、取模(%
)这几个操作符,使用方法一样,没啥好说的。
字符串运算
字符串操作符只有一个:连接操作符(.
),用来把两个字符串连接成一个字符串。
赋值操作符
最基本的赋值操作符(=
)可谓是使用频率最高的操作符了吧。
PHP也支持组合赋值操作符:+=
, -=
, *=
, /=
, %=
, .=
。它们的含义和使用方法跟C语言中的一样,这里也就不再赘述。
还有自增(++
)和自减(--
)操作符,要注意它们在变量前和变量后的区别,含义和使用方法跟C语言中完全一致。
引用操作符
PHP中的引用操作符(&
)类似于C语言中的指针,我们也可以把它理解为给变量起了一个新的别名。
通常我们把一个变量赋值给另一个变量,是对原始变量做了一份拷贝,之后对原始变量和目的变量的修改互不干扰。
如果在赋值时使用了引用操作符,那么相当于对原始变量起了一个别名,原变量和目标变量指向同一处内存区域,对其中一个修改都会反映到另一个上面。
例如下面的代码片段:
$a = 5;
$b = &$a;
$a = 7;
这时$a和$b相当于一个事物的两个名字,浑然一体。当$a的值修改为7时,相应的$b的值也为7。
可以使用unset
操作来切断这种关联,比如对$a变量使用unset
操作:
unset($a);
这时相当于$a这个别名被抹去了,不再存在,只剩下$b可用。
比较操作符
PHP中的比较操作符值得注意的就是==
和===
的区别。==
是判断是否相等的操作符,只要操作符两边的操作数值相等,那么就会判断为true;而===
是判断是否完全相同的操作符,两边的操作数不但值要相等,类型也要相同,才会返回true。
例如下面的代码:
$a = 0;
$b = "0";
printf("%d\n", $a == $b);
printf("%d\n", $a === $b);
这里$a == $b
就返回true,而$a === $b
就返回false,因为$a和$b的类型不一致。
同样,对判断不相等(!=
)和判断不相同(!==
)的这两个操作符的理解也是一样。
其它的比较操作符的含义和使用跟其它编程语言中类似,不再多说。
逻辑操作符
PHP中的逻辑操作符包含NOT(!
)、AND(&&
)、OR(||
)、低优先级AND(and
)、低优先级OR(or
)、XOR(xor
),含义和用法跟其它编程语言没有什么区别,值得注意的就是另外提供了两个低优先级的逻辑操作符: and
和or
。
位操作符
PHP中也提供了位操作符,但跟C语言相比,可能使用的机会不是很多。
包含位AND(&
)、位OR(|
)、位NOT(~
)、位XOR(^
)、左移(<<
)、右移(>>
)这些操作符。
其它操作符
逗号操作符
逗号操作符(,
)用来分割函数的参数和其它一些列表元素。
对象操作符
新建对象操作符(new
)用来实例化类,新建一个对象。
对象成员引用操作符(->
)用来访问一个类对象的成员。
三元操作符
唯一的一个三元操作符:?:
,含义和使用跟C语言中一模一样,不再赘述。
错误抑制操作符
PHP中有一个特殊的操作符@
,可以用在任何表达式的前面,用来抑制错误的产生。
例如:
$a = 10 / 0;
这里有一个明显的错误:除数为0,执行时会显示一条警告错误。
但如果前面使用了@
操作符:
$a = @(10/0);
这个错误就会被压制,不再输出警告信息。但这样做,有点掩耳盗铃的味道,所以,当你抑制一个错误发生时,应该添加一些错误处理代码来优雅地处理这种情况。
如果在配置文件php.ini
中开启了track_errors
选项,那么经过@
操作符压制的错误信息会存储在全局变量$php_errormsg
中,可以通过检查该变量来判断是不是有错误产生了。
执行操作符
当我们尝试在PHP中执行一个外部的命令行程序时,就可以使用执行操作符(``)来进行,如下:
$out = `ls -la`;
echo $out;
命令执行的输出结果返回给变量$out。
数组相关操作符
对于数组操作,除了常规的数组元素操作符[]
外,还提供了如下一些针对数组的操作符:
联合操作符(
+
): 用来把两个数组的元素合并成一个数组。判断两个数组是否相等的操作符(
==
): 用来比较两个数组是否含有相同的元素。判断两个数组是否完全相同的操作符(
===
): 用来比较两个数组是否含有相同的元素并且元素的顺序相同。判断两个数组是否不相等的操作符(
!=
和<>
)判断两个数组是否不相同的操作符(
!==
): 如果两个数组元素相同但顺序不同,也返回true
类型操作符
PHP提供了一个类型判断操作符:instanceof
,用来检查一个对象是否是一个类的实例,只能用于对象变量。
例如下面代码片段:
class SampleClass{};
$myOjbect = new SampleClass();
if ($myOjbect instanceof SampleClass)
{
echo "myObject is a instance of SampleClass";
}