PHP学习笔记:PHP基本语法详解
---运算符
1. 运算符的优先级
详见PHP手册
2. 算数运算符
算数运算符
除法运算符总是返回浮点数
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和$a 的符号相同。例如:
<span style="font-size:14px;"><?php
echo (5 % 3)."\n"; // prints 2
echo (5 % -3)."\n"; // prints 2
echo (-5 % 3)."\n"; // prints -2
echo (-5 % -3)."\n"; // prints -2
?></span>
对于%的细节讲解
当对一个大数取模时(即超过PHP_INT_MAX)会出现错误:
<span style="font-size:14px;"><span style="font-size:14px;"><?php
var_dump(5555555555555%5);//结果是int -4,而正确结果应该是int 0;
?></span></span>
解决方案:
用fmod()代替%, fmod — 返回除法的浮点数余数
<span style="font-size:14px;"><span style="font-size:14px;"><?php
var_dump(fmod(5555555555555,5));//结果是float 0;
?></span></span>
这是因为PHP的float其实是double,甚至在32位系统,可以准确地代表整数52字节,
3. 赋值运算符
基本的赋值运算符是"="。
对于数组 array,对有名字的键赋值是用"=>"运算符。
此运算符的优先级和其它赋值运算符相同。
组合运算符
+=
-=
*=
/=
%=
.=
引用赋值:
<span style="font-size:14px;"><span style="font-size:14px;"><?php
$a = 3;
$b = &$a; // $b 是 $a 的引用
print "$a\n"; // 输出 3
print "$b\n"; // 输出 3
$a = 4; // 修改 $a
print "$a\n"; // 输出 4
print "$b\n"; // 也输出 4,因为 $b 是 $a 的引用,因此也被改变
?></span></span>
注意:自 PHP 5 起,new运算符自动返回一个引用,因此再对new 的结果进行引用赋值在 PHP 5.3 以及以后版本中会发出一条 E_DEPRECATED
错误信息,在之前版本会发出一条E_STRICT
错误信息。
<span style="font-size:14px;"><?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;
?></span>
4.位运算符
5.递增/递减运算符
PHP递增/递减运算符不影响布尔值。递减 NULL
值也没有效果,但是递增NULL
的结果是 1。
在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中$a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。
6. 逻辑运算符
7. 字符串运算符
有两个字符串(string)运算符。第一个是连接运算符("."),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(".="),它将右边参数附加到左边的参数之后。 <?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!"
?>
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!"
?>
8. 数组运算符
+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。
9. 类型运算符instanceof
a) 对类使用 instanceof
b) 对继承类使用instanceof
c) 使用 instanceof 检查对象不是某个类的实例
d) 对接口使用 instanceof
e) 对其它变量使用instanceof
f) 用 instanceof 检测其它变量
g) 避免 PHP 5.0 中 instanceof 引起的类名查找和致命错误问题