一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Php入门教程之PHP 运算符用法说明

时间:2013-07-31 编辑:简简单单 来源:一聚教程网


PHP 运算符

PHP 运算符主要包括:

1.算术运算符
2.赋值运算符
3.比较运算符
4.三元运算符
5.逻辑运算符
6.字符串运算符
7.错误控制运算符

算术运算符

运算符 说明 例子 运算结果
+ 加 $x = 2;
$y = $x+1; $y = 3
- 减 $x = 2;
$y = $x-1; $y = 1
* 乘 $x = 2;
$y = $x*3; $y = 6
/ 除,返回结果为浮点类型 $x = 6;
$y = $x/3; $y = 2
% 求余,返回结果为浮点类型 $x = 6;
$y = $x%4; $y = 2
++ 递加,分为前加和后加
对布尔值和 NULL 无效 $x = 2;
++$x;(前加)
$x++;(后加) $x = 3
– 递减,分为前递减和后递减
对布尔值和 NULL 无效 $x = 2;
–$x;(前减)
$x–;(后减) $x = 1

对于前加和后加,执行后的结果都是变量加1,其区别在于执行时返回结果不一样,参考下面两个例子:


1

2 $x = 2; 

3 echo $x++;  //输出2 

4 echo $x;    //输出3 

5   

6 $x = 2; 

7 echo ++$x;  //输出3 

8 echo $x;    //输出3 

9 ?>
递减同理。

赋值运算符
赋值运算符“=”用于赋值运算,赋值运算符的作用在于把右边的值赋值给左边变量:


1 $x = 2;
该例子将整型值 2 赋值给变量 $x。

赋值运算符其他用法
赋值运算符可以嵌套使用:


1

2 $y = ($x = 2) + 5;    //结果为 $x=2,$y=7 

3 ?>
赋值运算符的一些变形使用方法:


1 $y += $x;
实际上它等同于:

 

1 $y = $y + $x;
同理有:


1 $y -= $x; 

2 $y *= $x; 

3 $y /= $x; 

4 $y %= $x; 

5 $y .= $x;   // . 为连接运算符,见字符串运算符
比较运算符

运算符 说明 例子 运算结果
== 等于 2 == 3 FALSE
!= 不等于,也可写作<> 2 == 3 TRUE
> 大于 2 > 3 FALSE
< 小于 2 < 3 TRUE
>= 大于等于 2 >= 3 FALSE
<= 小于等于 2 <= 3 TRUE

比较运算符也可用于字符串比较。

三元运算符
三元可以视作是特殊的比较运算符:


 (A) ? (B) : (C)
语法解释:在 A求值为 TRUE 时整个表达式的值为 B,否则为 C。

例子:

 

1 $y = ($x == 2) ? $x : 1;

该例子判断变量$x的值是否等于2,如果$x等于2,那么$y的值就等于$x(也就是等于2),反之$y就等于1。

逻辑运算符

运算符 说明 例子 运算结果

&& 逻辑与,也可写作 and $x = 2;
$y = 6;
$x && $y > 5 FALSE

|| 逻辑或,也可写作 or $x = 2;
$y = 6;
$x && $y > 5 TRUE

! 逻辑非,取逻辑的反面 $x = 2;
$y = 6;
!($x > $y) TRUE

连接运算符
字符串运算符主要指连接运算符“.”,它将连接其左右参数字符串。

例子:


$x = "beijing"; 

$y = $x."你好";       //$y = "beijing你好"


如该例子所示,字符和变量共同输出时需要使用连接运算符。

连接符与赋值运算符一起可构成连接赋值运算符:


$x = "beijing"; 

$x .="你好";      //$x = "beijing你好”

错误控制运算符
错误控制运算符:@,当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

/* 读取文件 */
$my_file = @file ('file1') or
    die ("打开文件失败,错误信息: '$php_errormsg'");
?>

错误控制运算符经常用于在可能产生错误的地方屏蔽 PHP 的系统错误而提示友好的错误信息


运算符优先级的一个例外


今天在老王的技术手册看到一个问题:

输出是什么?

这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单,

如果说布尔与之前的部分, 是由于优先级的问题, 但是如果仅仅是优先级的问题的话, 那么结果应该是:

$a = (100 && $b) = 200而实际上的结果, 确实高优先级的&&让步给次优先级的=, 让 $b = 200 先结合了.

究其原因, 是因为PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:

Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.

这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,

有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:

laruence你好:
问一个php运算符优先级的问题
$t == 1 && $tt = 2
按照php运算符优先级应该是
(($t == 1) && $tt) = 2
这个顺序执行,但实际上应该是
($t == 1) && ($tt = 2)
我有些不太理解。

其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:

expr_without_variable:  // 有隐规则存在, 相当于T_BOOLEAN_AND成为了"一元操作符".  |   expr T_BOOLEAN_AND  { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); }

exp最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:

$result = mysql_query(*)  or die(mysql_error());

类似的还可以用or来实现三元操作符(?:)的功能:

$person = $who or $person = "laruence";

//等同于:    

$person = empty($who)? "laruence" : $who;

 

php 恒等运算符(===)与比较运算符(==)的区别


恒等计算符,和比较运算符号“==”的区别是 “==”不会检查条件式的表达式的类型,恒等计算符会同时检查表达式的值与类型。
这主要和php是无类型语言有关,比如 NULL,FALSE,array(),”",0,”0″这几个值如果用==他们是相等的,但是你如果判断出某个值真正的返回值呢,就可以用 ===
$a = 0;
$b = FALSE;
$a === FALSE 不成立,但 $b === FALSE成立,如果是==, $a == FALSE 和 $b == FALSE都成立

===运算符还是很有用的,php有些内置函数成功会返回某个值,失败会返回false,假如成功了但返回的是”"或者0之类的空值你怎么判断成功或者失败呢?这是就可以用 === ,它可以区分变量类型。

参考:

比较运算符 例子 名称 结果
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。

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

var_dump(0 == "a"); // 0 == 0 -> true

var_dump("1" == "01"); // 1 == 1 -> true

var_dump("1" == "1e0"); // 1 == 1 -> true

switch ("a") {

case 0:

    echo "0";

    break;

case "a": // never reached because "a" is already matched with 0

    echo "a";

    break;

}

?>


说了一堆了我们再看看另一篇文章


运算符号(php)操作符号

按运算符号的功能分为

■算数运算符 + – * / % ++ –
■字符串运算符(连接运算符) .
■赋值运算符  =   +=  -=  *=   %=   .=
■比较(关系、条件)运算符>  <   >=   <==  ==  ===  !=  <>  !==
■逻辑运算符 && and    ||or   !  not
■位运算符 &  |   ~ ^ <<   >>  >>>
■其他的预算符?  : ” ->  ->  ::  & $
■()改变优先级别
%有两个目的使用:整除运算;控制范围,不要用小数,也不要用负数
%会把两边的数转为整数后在整除
$year=2010;
if($yeay%4==0 && $year%100!=0  ||$year%400==0){
echo"今年是闰年";
}
控制范围
$num=4600009;
echo $num%10;//9任何数和10 取余不会超过9
$a++(先用变量再自增1)  ++$a(先自增1在用变量)  $a--   --$a
$a=10;
$b=$a++;//$b=10  $a=11
$c=--$b;//$c=9 $b=9
//    9           +     11
$d=$c++  +  ++$c;//$d=20 $c=11
$e=$d--  -  --$d;//2
$name="ljw";
$age=25;
$heigh=1.75;
echo "我的名字是:{$name}我的年龄:{$age}我的身高{$hegit}";
echo'我的名字是:'.$name.'我的年龄:'.$age.'我的身高'.$hegit.;
echo "/$age=".$age;比较运算符———条件运算法符————-关系运算符
比较后的结果只有一种  boolean  true   false
===全等运算符
!==
—————===比较时不仅要求内容相同,也要求类型相同
&按位与(两个都为1才为1)    |按位或(有一个为1就为1)   ^异或(不同为1相同为0)  ~取反(0与1互换) 左移  << , 右移>>   无符号>>右移
—————————————————————————————–
$a=20;//16+4                00000000   00000000  00000000  00010100
—————————————————————————————–
$b=30;//16+8+4+2    00000000   00000000  00000000  00011110
—————————————————————————————–
$c= $a & $b;
echo $c;
&和|既可以做为逻辑运算符,又可以作为位运算符
&&  ||
短路问题:&& 和||会发生短路
&& 在做运算时,如果前边的数为false,则后面是否为true,整个表达式都是false
|| 在做运算是,如果前面的数是true,则后边是否为false,整个表达式都为true;
&或|运算时,两边都会被执行。
其他运算符
条件?成立执行这里 :不成立则执行这里
反引号执行操作系统命令 “

$str=`ipconfig/all`;
echo '

';
echo $str;
echo '
'@getType();错误控制符,放在表达式前边,表达式有错误的时候屏蔽掉,不推荐使用。

热门栏目