[PHP中文手册][二.语言参考-表达式,运算符]
标签(空格分隔): 未分类
表达式
- PHP 支持全等运算符 ===(值和类型均相同)和非全等运算符 !==(值或者类型不同)。
基本跟C语言的描述一样
运算符优先级
算数运算符
除法运算符总是返回浮点数。
- 只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号(正负号)相同。即 a a b 的结果和 $a 的符号相同。例如:
赋值运算符
- 在 PHP 中普通的传值赋值行为有个例外就是碰到对象
object
时,在 PHP 5 中是以引用赋值
的,除非明确使用了clone
关键字来拷贝。
引用赋值
PHP 支持引用赋值,使用“$var = &$othervar;”
语法。引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。
- 自 PHP 5 起,
new
运算符自动返回一个引用,因此再对new
的结果进行引用赋值在 PHP 5.3 以及以后版本中会发出一条E_DEPRECATED
错误信息,在之前版本会发出一条E_STRICT
错误信息。
以下代码产生警告
<?php
class C {}
/* The following line generates the following error message:
* Deprecated: Assigning the return value of new by reference is deprecated in...
*/
$o = &new C;
?>
位运算符
跟C一样
比较运算符
PHP7提供两个运算
$a <=> $b
:当$a
小于、等于、大于$b
时 分别返回一个小于、等于、大于0的integer
值。$a ?? $b ?? $c
:从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供。
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
?>
错误控制运算符
PHP 支持一个错误控制运算符:@。
当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
- 不太理解
执行运算
PHP 支持一个执行运算符:反引号(``)
- PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>
使用反引号运算符
" ' "
的效果与函数shell_exec()
相同。反引号运算符在激活了安全模式或者关闭了
shell_exec()
时是无效的。
递增/递减运算符
基础跟C语言差不多
在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。
- 例如,在 Perl 中
$a = 'Z'
;$a++
; 将把 $a变成’AA’, - 注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。
- 递增其他字符变量则无效,原字符串没有变化。
- 例如,在 Perl 中
== Characters ==
X
Y
Z
AA
AB
AC
== Digits ==
A9
B0
B1
B2
B3
B4
A09
A10
A11
A12
A13
A14
逻辑运算符
字符串运算符
一个.
,一个.=
。
数组运算符
<?php
$a= array("a"=>"apple","b"=>"bnana");
$b= array("a"=>"pear","b"=>"strawberry","c"=>"cherry");
$c=$a+$b;
var_dump($c);
//array (size=3)
//'a' => string 'apple' (length=5)
//'b' => string 'bnana' (length=5)
//'c' => string 'cherry' (length=6)
$c = $b + $a;
var_dump($c);
//array (size=3)
// 'a' => string 'pear' (length=4)
// 'b' => string 'strawberry' (length=10)
// 'c' => string 'cherry' (length=6)
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
类型运算符
instanceof
instanceof
用于确定一个 PHP 变量是否属于某一类 class 的实例
<?php
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>
instanceof
也可用于确定一个变量是不是实现了某个接口的对象的实例:
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>
instanceof
运算符是 PHP 5
引进的。在此之前用is_a()
,但是后来 is_a()
被废弃而用 instanceof
替代了。注意自 PHP 5.3.0 起,又恢复使用 is_a()
了。