您的位置:首页 > PHP > PHP帮助手册拾遗一:运算符

PHP帮助手册拾遗一:运算符

PHP帮助手册拾遗一:运算符

1、基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。
它实际上意味着把右边表达式的值赋给左边的运算数。

赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3。这样就可以做一些小技巧:

1
2
3
4
5
<?php
 
$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。     
 
?>

2、取模 $a % $b 在 $a 为负值时的结果也是负值。
3、 尽管 ! 比 = 的优先级高,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的输出被赋给了 $a。
同样,如下代码:

1
2
3
4
5
<?php
 if ($a = 100 && $b = 200) {                  
var_dump($a, $b); 
} 
?>

先赋值,再进行与运算
此问题鸟哥有一篇文章有谈到过,猛击http://www.laruence.com/2010/07/26/1668.html

4、如果比较一个整数和字符串,则字符串会被转换为整数。
如果比较两个数字字符串,则作为整数比较。此规则也适用于 switch 语句。

5、执行运算符
PHP 支持一个执行运算符:反引号(“)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。

1
2
3
4
<?php
$output = `ls -al`;                                           
echo $output;
?>

注: 反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。

6、递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。

1
2
3
4
5
6
$b = TRUE;
echo --$b;                                                                          
echo ++$b;
$c = NULL;
echo --$c;
echo ++$c;

输出在个1和一个空值

7、+ 运算符把右边的数组附加到左边的数组后面,但是重复的键值不会被覆盖。

1
2
3
4
$array1 = array(1, 'key' => 2);
$array2 = array('key' => 3, 'key1' => 4);                                 
$array = $array1 + $array2;
var_dump($array);

输出array(3) { [0]=> int(1) ["key"]=> int(2) ["key1"]=> int(4) }
数组2中的3已经不存在了,数组1中的2没有被覆盖

8、使用括号可以增强代码的可读性。

9、除号(“/”)总是返回浮点数,除非这两个运算数是整数(或由字符串转换成的整数)
这里手册中有一点没有说明,返回的值必须是整数才行,否则如 6/4的结果就是float了
//此处在某个中文手册中有翻译错误,意思完全弄反了,纠结…
代码示例:

1
2
3
4
5
6
7
8
9
$a = 8;
$b = 4;
$c = $a / $b;
var_dump($c);                                                                     
 
$a = 6;
$b = 4;
$c = $a / $b;
var_dump($c);

10、空字符串,false,NULL等值在算术运算符中将会以0对待。
如下所示代码:

1
2
3
echo 5 * "", '<br>';                                                                
echo 5 + false, '<br>';
echo 5 / NULL, '<br>';

11、 加号、减号、点号运行的优先级是一样一样滴
如下所示代码:

1
2
$var = 3;
echo "string " . $var + 3;

输出3

12、instanceof后面不能接字符串,可以直接接类名或包含类名的变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Demo {                                                                     
 
}
 
$demo = new Demo();
 
/* 以变量的形式存储类名字符串是正确的 */
$class = "Demo";
if ($demo instanceof $class) {
    echo 'yes';
}
 
/* 不能直接接类名的字符串,即类名不能加双引号 */
$demo = new Demo();
 
if ($demo instanceof "Demo") {
    echo 'yes';
}
 
/* 类名上无引号 */
$demo = new Demo();
 
if ($demo instanceof Demo) {
    echo 'yes';
}
本文地址:PHP帮助手册拾遗一:运算符    文章出处:PHP源码阅读,PHP设计模式,PHP学习笔记,项目管理-胖胖的空间

转载请以链接形式注明原始出处和作者,谢绝不尊重版权者抄袭!

11 条留言我要留言

  •   1 - xiaokai  |  2010-08-18 at 10:34 am  

    哈哈, 哥第一时间赶过来了..

  •   2 - 胖子  |  2010-08-18 at 10:39 am  

    谢哥了,哈哈

  •   3 - xiaokai  |  2010-08-18 at 10:40 am  

    哈哈, 应该哥谢谢你. 在你这学到不少东西..

  •   4 - 胖子  |  2010-08-18 at 10:50 am  

    学习,分享,嘿嘿

  •   5 - xiaokai  |  2010-08-18 at 11:03 am  

    呵呵.

  •   6 - xiaoqing  |  2010-08-20 at 6:32 pm  

    bu cuo

  •   7 - show  |  2010-08-22 at 11:31 pm  

    哈哈,php手册是该时常看看~我顶哥

  •   8 - 胖子  |  2010-08-23 at 8:43 am  

    是的,找时间把这些细节过一遍!

  •   9 - Vayn  |  2010-09-01 at 4:36 am  

    最难的还是Bitwise Operator,到现在也不敢说自己完全掌握了

  •   10 - 胖子  |  2010-09-01 at 9:00 am  

    基本功啊,基本功!

Trackbacks

  1. Think In LAMP Blog » Blog Archive » PHP每月通讯(2010年9月)

必填

必填,绝不公开

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word