1.1.1. 04.流程控制


1. if、else

if($a == 1) {
  echo '1';
}else if($a == 2) {
  echo '2';
}else{
  echo 'other';
}

#简写  不推荐
if ($a == 1):
  echo "1";
else:
    echo "else";
endif;

2.switch

switch 类似于一系列的 if else。每个 case 下都有一个 break。如果没有则继续往下执行。

if($a == 1) {
  echo '1';
}else if($a == 2) {
  echo '2';
}else{
  echo 'other';
}
# swtich 
switch ($a) {
  case 1:
    echo '1';
    break;
  case 2:
    echo '2';
    break;
  default:
    echo 'other';
    break;
} // 其结果只能是其中一个。
switch ($a) {
  case 1:
    echo '1';
  case 2:
    echo '2';
  default:
    echo 'other';
    break; 
}
// 若 $a=1 , 则值为 12other

3.while、do while

while 和 do while都是满足条件后才循环,不满足则跳出。 do while 相比 while 是先执行一次再判断。

$a = 10;
while($a>1) {
  echo $a--;//1098765432
}

#do while
$b = 1;
do{
  echo $b; //1
}while($b>1)

4.for foreach

for 循环是 PHP 中最复杂的循环结构。它的行为和 C 语言的相似

for (expr1; expr2; expr3){
    statement
}

第一个表达式(expr1)在循环开始前无条件求值(并执行)一次。

expr2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。

expr3 在每次循环之后被求值(并执行)。

$people = Array(
        Array('name' => 'Kalle', 'salt' => 856412), 
        Array('name' => 'Pierre', 'salt' => 215863)
        );

for($i = 0; $i < count($people); ++$i)
{
    $people[$i]['salt'] = rand(000000, 999999);
}
//每次都计算count 代码执行慢 可以使用中间变量

$count = count($people);
for($i = 0; $i < $count; ++$i)
{
    $people[$i]['salt'] = rand(000000, 999999);
}

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象

引用修改后,一定要 unset 将 $value 销毁

foreach($array as $key=>$value) {

}
# 简写
foreach($array as $key=>$value):

endforeach;
#引用修改 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
unset($value);

5.break 、continue

break 结束当前 forforeachwhiledo-while 或者 switch 结构的执行。break后面可以跟一个数字。表示跳出几重循环

for($i = 0; $i < 10; $i++) {
  if($i==5){
    break;
  }
  echo $i;
}
//01234
for($i=0;$i<10;$i++) {
  for($j=0;$j<5;$j++) {
       if($j == 2) {
      break 2; #跳出两层循环
       }
  }
}

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

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

for($i = 0; $i < 10; $i++) {
  if($i==5){
    continue;
  }
  echo $i;
}
// 012346789

6.declare

declare 结构用来设定一段代码的执行指令。declare 的语法和其它流程控制结构相似

目前只认识两个指令:ticks encoding

Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用ticks=N 来指定的 encoding 指令来对每段脚本指定其编码方式。

declare(ticks=1);

// A function called on each tick event
function tick_handler()
{
    echo "tick_handler() called\n";
}

register_tick_function('tick_handler');

$a = 1;

if ($a > 0) {
    $a += 2;
    print($a);
}
declare(encoding='ISO-8859-1');

7.return

在函数中使用return 将结束函数的执行。

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

function f(){
  return 1;
  echo '11';//不会执行
}

#a.php
<?php
include("b.php");
echo "a";
?>

#b.php
<?php
echo "b";
return;
?>
// ba

8.include 、require

include(path) 会按照给定的参数 进行查找,如果没有找到就到include_path中查找。如果还没有找到,那么就会抛出一个警告。

如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径。include_path就会被忽略。

require 和include查找文件基本上一致。只是require会抛出一个error错误终止代码的执行。

require 和include是一个语言构造器而不是一个函数

include 'a.php';
echo "hello";
# 会输出hello

require 'a.php';
echo "hello";
# 抛出一个error hello不会输出。

9.include_once 、require_once

include_once 、require_once 语句在脚本执行期间包含并运行指定文件.如果该文件中已经被包含过,则不会再次包含

include_once 会抛出warning 。require_once 会抛出error

10.goto

goto操作符并不常用。用来跳转程序的一个位置。目标位置只能位于同一个文件和作用域

无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中

<?php
for($i=0,$j=50; $i<100; $i++) {
  while($j--) {
    if($j==17) goto end; 
  }  
}
echo "i = $i"; // 跳过不输出
end:
echo 'j hit 17';  // 输出 
?>
Copyright © Kagami丶 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-10-17 19:28:55

results matching ""

    No results matching ""