【php 知识整理】(2) 运算符 & 流程控制

来源:互联网 发布:域名国外 编辑:程序博客网 时间:2024/06/03 12:29

第五章 运算符

1、运算符优先级

2、算术运算符

例子

名称

结果

-$a

取反

$a 的负值。

$a + $b

加法

$a 和 $b 的和。

$a - $b

减法

$a 和 $b 的差。

$a * $b

乘法

$a 和 $b 的积。

$a / $b

除法

$a 除以 $b 的商。

$a % $b

取模

$a 除以 $b 的余数。

除号(“/”)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。

: 取模 $a % $b 在 $a 为负值时的结果也是负

3、赋值运算符

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

$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。

注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。

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”)。

5、比较运算符

例子

名称

结果

$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。

6、错误控制运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。 如果激活了 track_errors 特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg 中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。

: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和 include() 调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

7、执行运算符

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

$output = `ls -al`;echo "<pre>$output</pre>";

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

8、递增/递减运算符

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

例子

名称

效果

++$a

前加

$a 的值加一,然后返回 $a。

$a++

后加

返回 $a,然后将 $a 的值加一。

--$a

前减

$a 的值减一, 然后返回 $a。

$a--

后减

返回 $a,然后将 $a 的值减一。

9、逻辑运算符

例子

名称

结果

$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

10、字符串运算符

有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后

11、数组运算符

例子

名称

结果

$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。

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

 

第六章  流程控制

1if...elseif...else
2while

while 语句的含意很简单,它告诉 PHP只要 while表达式的值为 TRUE就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果while 表达式的值一开始就是FALSE,则循环语句一次都不会执行。

3do-while

do-while 循环和 while循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和一般的 while 循环主要的区别是do-while 的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在一般的while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为FALSE 则整个循环立即终止)。

4for
5foreach
6break

 break 结束当前 forforeachwhiledo-while或者 switch结构的执行。

 break 可以接受一个可选的数字参数来决定跳出几重循环,如 break 2;

7continue

 continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

 Note: 注意在 PHPswitch语句被认为是可以使用 continue的一种循环结构。

 continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。

8switch

很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch语句的用途。

Note: 注意和其它语言不同,continue语句作用到 switch上的作用类似于 break。如果在循环中有一个switch 并希望continue 到外层循环中的下一轮循环,用continue 2

注意 switch/case 作的是松散比较,即用 ==进行比较 

为避免错误,理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配时PHP 才开始执行语句,直到switch 的程序段结束或者遇到第一个break 语句为止。如果不在case 的语句段最后写上break 的话,PHP将继续执行下一个 case中的语句段。

switch 语句中条件只求值一次并用来和每个 case 语句比较。在elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用switch 语句可能会快一些。

9declare

10return

如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval()语句或者脚本文件的执行。

如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include的或者 require的,则控制交回调用文件。此外,如果当前脚本是被 include的,则 return的值会被当作 include调用的返回值。如果在主脚本文件中调用 return,则脚本中止运行。如果当前脚本文件是在php.ini 中的配置选项auto_prepend_file 或者auto_append_file 所指定的,则此脚本文件中止运行。

Note: 注意既然 return是语言结构而不是函数,因此其参数没有必要用括号将其括起来。通常都不用括号,实际上也应该不用,这样可以降低PHP 的负担。

Note: 如果没有提供参数,则一定不能用括号,此时返回 NULL。如果调用return 时加上了括号却又没有参数会导致解析错误。

Note: 当用引用返回值时永远不要使用括号,这样行不通。只能通过引用返回变量,而不是语句的结果。如果使用return ($a); 时其实不是返回一个变量,而是表达式($a) 的值(当然,此时该值也正是$a 的值)

11include/require

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path指定的目录寻找。如果在 include_path下没找到该文件则 include最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和require 不同,后者会发出一个致命错误。

如果定义了路径——不管是绝对路径还是当前目录的相对路径——include_path都会被完全忽略。例如一个文件以 ../开头,则解析器会在当前目录的父目录下寻找该文件。

当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。

当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中需要作为PHP 代码执行的任何代码都必须被包括在有效的PHP 起始和结束标记之中。

如果“URL fopen wrappers”PHP 中被激活(默认配置),可以用URL而不是本地文件来指定要被包含的文件。如果目标服务器将目标文件作为PHP 代码解释,则可以用适用于HTTP GET URL 请求字符串来向被包括的文件传递变量。严格的说这和包含一个文件并继承父文件的变量空间并不是一回事;该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果。

处理返回值:在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回1,除非在包含文件中另外给出了返回值。可以在被包括的文件中使用return 语句来终止该文件中程序的执行并返回调用它的脚本。同样也可以从被包含的文件中返回值。可以像普通函数一样获得include 调用的返回值。不过这在包含远程文件时却不行,除非远程文件的输出具有合法的PHP 开始和结束标记(如同任何本地文件一样)。可以在标记内定义所需的变量,该变量在文件被包含的位置之后就可用了。

因为 include 是一个特殊的语言结构,其参数不需要括号。在比较其返回值时要注意。

如果在包含文件中定义有函数,这些函数不管是在 return 之前还是之后定义的,都可以独立在主文件中使用。如果文件被包含两次,PHP 5 发出致命错误因为函数已经被定义,但是 PHP 4不会对在 return之后定义的函数报错。推荐使用 include_once而不是检查文件是否已包含并在包含文件中有条件返回。

另一个将 PHP 文件包含到一个变量中的方法是用输出控制函数结合include 来捕获其输出,例如:

$string = get_include_contents('somefile.php');function get_include_contents($filename) {    if (is_file($filename)) {        ob_start();        include $filename;        $contents = ob_get_contents();        ob_end_clean();        return $contents;    }    return false;}

12include_​once/require_​once
13goto

goto 操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是goto 之后接上目标位置的标记。PHP中的 goto有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者switch 结构中。可以跳出循环或者switch,通常的用法是用goto 代替多层的break

for($i=0,$j=50; $i<100; $i++) {  while($j--) {    if($j==17) goto end;   }  }echo "i = $i";end:echo 'j hit 17';






原创粉丝点击