简单就不提了。
1>优先级的问题:一些变态公司特别喜欢考这个。从上到下,由高到低。
非结合 new
左结合 [
非结合 ++ --
非结合 ! ~ - (int) (float) (string) (array) (object) @
左结合 * / %
左结合 + - .
左结合 << >>
非结合 < <= > >=
非结合 == != === !==
左结合 &
左结合 ^
左结合 |
左结合 &&
左结合 ||
左结合 ? :
右结合 = += -= *= /= .= %= &= |= ^= <<= >>=
左结合 and
左结合 xor
左结合 or
左结合 ,
尽管 ! 比 = 的优先级高,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的输出被赋给了 $a。
2>算术运算符(参考手册的数学函数一节)
a>除号(“/”)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。
b>取模 $a % $b 在 $a 为负值时的结果也是负值。
3>赋值运算符
a>赋值运算的返回值为"="左边的变量的值。比如"$a=5"的值为5。$b=($a=5)的意义就是把这个式子的值赋给$b
b>注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在很密集的循环中拷贝一些值例如大数组。
c>引用赋值:自 PHP 4 起支持引用赋值,用 $var = &$othervar; 语法,引用赋值意味着两个变量都指向同一个数据,没有任何数据的拷贝。有关引用的更多信息见引用的说明。
4>位运算符
$a&$b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a|$b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。
$a^$b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。
~$a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。
$a<<$b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a>>$b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值。
例如:
echo 12 ^ 9; // 输出为 '5'
echo "12" ^ "9"; // 输出退格字符(ascii 8)
// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8
echo "hallo" ^ "hello"; // 输出 ascii 值 #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
5>比较运算符
如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于 switch 语句。
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
对于多种类型,比较运算符根据下表比较(按顺序)。
null/string■string■将 NULL 转换为 "",进行数字或词汇比较
bool/null■任何其它类型■转换为 bool,FALSE < TRUE
object■object■内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
string/resource/number■string/resource/number■将字符串和资源转换成数字,按普通数学比较
array■array■具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较
array■任何其它类型■array 总是更大
object■任何其它类型■object 总是更大
6>三元运算符?
格式:(expr1) ? (expr2) : (expr3)
用法说明:在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
注意:
三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。
7>错误控制运算符@
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。如果激活了 track_errors 特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg 中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。(这个暂时不太懂???不明白???)
@ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和 include() 调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
8>执行运算符``
注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。
$output = `ls -al`;
echo "<pre>$output</pre>";
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
9>递增/递减运算++,--
递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
++$a 前加 $a 的值加一,然后返回 $a。
$a++ 后加 返回 $a,然后将 $a 的值加一。
--$a 前减 $a 的值减一, 然后返回 $a。
$a-- 后减 返回 $a,然后将 $a 的值减一。
问题:$b=$a++.++的优先级高于=,但是为什么先执行=而后执行++呢???不明白???
10>逻辑运算符(注意有两个与,两个或但是优先级不同)
$a and $b■And(逻辑与)■ TRUE,如果 $a 与 $b 都为 TRUE。
$a or $b■ Or(逻辑或) ■TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $b■ Xor(逻辑异或)■ TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a Not■(逻辑非)■ TRUE,如果 $a 不为 TRUE。
$a && $b ■And(逻辑与)■ TRUE,如果 $a 与 $b 都为 TRUE。
$a || $b ■Or(逻辑或)■ TRUE,如果 $a 或 $b 任一为 TRUE。
11>字符串连接运算符.
12>数组运算符:
$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。
+ 运算符把右边的数组附加到左边的数组后面,但是重复的键值不会被覆盖。
例如:
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of $a and $b: n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of $b and $a: n";
var_dump($c);
输出为:
Union of $a and $b:
array(3) {
["a"]=>
string(5) "apple"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "cherry"
}
Union of $b and $a:
array(3) {
["a"]=>
string(4) "pear"
["b"]=>
string(10) "strawberry"
["c"]=>
string(6) "cherry"
}
注意:
比较两个数组是否相同时,键的比较遵从比较运算符的原则。见(5)
即:键1和键"1"是==的。
例如:
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
13>类型运算符:instanceof
用来测定一个给定的对象,它的父对象或它们所实现的接口是否来自指定的对象类。
例:
class A { }
class B { }
$thing = new A;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
因为$thing是A的实例化对象,故输出:
A
关于本站 | 帮 助 | 广告服务 | 版权声明 | 业务合作 | 捐助本站 | 软件发布 | 联系我们
77资源下载 www.77zy.com ©2007-2008 版权所有
备案编号:赣ICP备07002641号 QQ:674648476