這里列出一些不同的以及經常被考到的細節(jié):

1>流程控制的替代語法(pascal的風格) 主要用在if,while,for,foreach 和 switch語句中。替代語法的基本形式是把左花括 " /> 一区二区三区播放,欧美日韩在线第一页,久久久久亚洲

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

php基礎知識:控制結構

php的控制結構,大部分和其他主流語言,如C,Java等相同。

這里列出一些不同的以及經常被考到的細節(jié):

1>流程控制的替代語法(pascal的風格)
主要用在if,while,for,foreach 和 switch語句中。替代語法的基本形式是把左花括號({)換成冒號(:),把右花括號(})分別換成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。 
例(1):
if ($a == 5):
 /*dosomething1*/
 /*dosomething1*/
endif;
就等同于:
if ($a == 5){
 /*dosomething1*/
 /*dosomething1*/
}
例(2):
if ($a == 5):
   echo "a equals 5";
   echo "...";
elseif ($a == 6):
   echo "a equals 6";
   echo "!!!";
else:
   echo "a is neither 5 nor 6";
endif;

2>for語句(經常考,并且徹底的明白也是必要的).
格式:(支持`:`……`endfor;`代替{}的形式)
for (expr1; expr2; expr3)
   statement
運行過程:
第一個表達式(expr1)在循環(huán)開始前無條件求值一次。 
expr2 在每次循環(huán)開始前求值。如果值為 TRUE,則繼續(xù)循環(huán),執(zhí)行嵌套的循環(huán)語句。如果值為 FALSE,則終止循環(huán)。 
expr3 在每次循環(huán)之后被求值(執(zhí)行)。 
等同的while語句為:
expr1;
while(expr2):
   expr3;
endwhile;

3>break的不同。
break的作用是:結束當前 for,foreach,while,do-while 或者 switch 結構的執(zhí)行。
同時break后面可以跟一個數字來決定跳出幾層循環(huán)。break 1;為跳出1層循環(huán)。
我不知道c里面有沒有,因為我沒有c語言的系統(tǒng)的書。

4>foreach
格式:
a.foreach (array_expression as $value)
   statement
b.foreach (array_expression as $key => $value)
   statement
說明:
a格式遍歷給定的 array_expression 數組。每次循環(huán)中,當前單元的值被賦給 $value 并且數組內部的指針向前移一步(因此下一次循環(huán)中將會得到下一個單元)。 
b格式做同樣的事,只除了當前單元的鍵名也會在每次循環(huán)中被賦給變量 $key。

注意:
a.當 foreach 開始執(zhí)行時,數組內部的指針會自動指向第一個單元。這意味著不需要在 foreach 循環(huán)之前調用 reset()。/*reset(array &array):把array的內部指針移動到數組array的第一個單元并返回值*/ 
b.除非數組是被引用,foreach 所操作的是指定數組的一個拷貝,而不是該數組本身。因此數組指針不會被 each() 結構改變,對返回的數組單元的修改也不會影響原數組。不過原數組的內部指針的確在處理數組的過程中向前移動了。假定 foreach 循環(huán)運行到結束,原數組的內部指針將指向數組的結尾。 
自 php 5 起,可以很容易地通過在 $value 之前加上 & 來修改數組的單元。此方法將以引用賦值而不是拷貝一個值。
例:
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
   $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
c.foreach 不支持用“@”來抑制錯誤信息的能力。

使用foreach例子:
$arr = array("one", "two", "three");
reset($arr);
while (list(, $value) = each($arr)) {
   echo "Value: $value<br>/n";
}
foreach ($arr as $value) {
   echo "Value: $value<br />/n";
}

5>continue的不同(我很少用continue)
作用:在循環(huán)結構用用來跳過本次循環(huán)中剩余的代碼并在條件求值為真時開始執(zhí)行下一次循環(huán)。
同break一樣,也接受一個數字來決定跳出幾層到循環(huán)代碼尾部。
注明:continue;和continue 1;一樣,都是跳到本層本次循環(huán)的末尾。continue 2則跳出本層循環(huán)到外層的末尾。

6>switch中continue的作用:類似于break(和其他語言不同)。

7>declare 
結構用來設定一段代碼的執(zhí)行指令。declare 的語法和其它流程控制結構相似: 
declare (directive)
   statement
directive 部分允許設定 declare 代碼段的行為。目前只認識一個指令:ticks(更多信息見下面 ticks 指令)。 
declare 代碼段中的 statement 部分將被執(zhí)行  怎樣執(zhí)行以及執(zhí)行中有什么副作用出現(xiàn)取決于 directive 中設定的指令。 
declare 結構也可用于全局范圍,影響到其后的所有代碼。

主要的例子就是用于Tricks(目前也只有tricks):
例如:
function profile($dump = FALSE)
{
   static $profile;
  // Return the times stored in profile, then erase it
   if ($dump) {
       $temp = $profile;
       unset($profile);
       return ($temp);
   }
   $profile[] = microtime();
}
// 注冊函數profile為ticks函數
register_tick_function("profile");
// 初始化。
profile();
// 運行一塊代碼,當執(zhí)行2句(ticks=2)簡單語句時,就調用一次函數profile();
declare(ticks=2) {
   for ($x = 1; $x < 50; ++$x) {
       echo similar_text(md5($x), md5($x*$x)), "<br />;";
   }
}
// 展示存放在概況存儲區(qū)(profile)的數據
print_r(profile (TRUE));

注意:
register_tick_function() should not be used with threaded webserver modules. Ticks are not working in ZTS mode and may crash your webserver. 
不能用在多道處理模塊(??不明白??什么是多道處理模塊?)的服務器上,不然會crash。我crash好多次了。郁悶。

8>require和include
不同點:
include() 產生一個警告而 require() 則導致一個致命錯誤。換句話說,如果想在遇到丟失文件時停止處理頁面就用 require()。include() 就不是這樣,腳本會繼續(xù)運行。同時也要確認設置了合適的 include_path。注意在 php 4.3.5 之前,包含文件中的語法錯誤不會導致程序停止,但從此版本之后會。

相同點以及用法:
a.變量范圍:
當一個文件被包含時,其中所包含的代碼繼承了 "包含語句" 所在行的變量范圍。從該處開始,調用文件在該行處可用的任何變量在被調用的文件中也都可用。不過所有在包含文件中定義的函數和類都具有全局作用域。 
如果 "包含語句" 出現(xiàn)于調用文件中的一個函數里,則被調用的文件中所包含的所有代碼將表現(xiàn)得如同它們是在該函數內部定義的一樣。所以它將遵循該函數的變量范圍。

b.解析模式
當一個文件被包含時,語法解析器在目標文件的開頭脫離 php 模式并進入 HTML 模式,到文件結尾處恢復。由于此原因,目標文件中應被當作 php 代碼執(zhí)行的任何代碼都必須被包括在有效的 php 起始和結束標記之中。 

c.在條件語句中的格式問題
因為 include() 和 require() 是特殊的語言結構,在條件語句中使用必須將其放在語句組中(花括號中)。
因為 include() 是一個特殊的語言結構,其參數不需要括號。在比較其返回值時要注意。

d.處理返回值
可以在被包括的文件中使用 return() 語句來終止該文件中程序的執(zhí)行并返回調用它的腳本。同樣也可以從被包含的文件中返回值??梢韵衿胀ê瘮狄粯荧@得 include 調用的返回值。不過這在包含遠程文件時卻不行,除非遠程文件的輸出具有合法的 php 開始和結束標記(如同任何本地文件一樣)??梢栽跇擞泝榷x所需的變量,該變量在文件被包含的位置之后就可用了。
例子:
return.php
==============
$var = 'php';
return $var;

noreturn.php
==============
$var = 'php';

testreturns.php
=============================
$foo = include 'return.php';
echo $foo; // prints 'php'
$bar = include 'noreturn.php';
echo $bar; // prints 1

e.函數和變量重定義的問題.
為了防止這種現(xiàn)象出現(xiàn),可以使用include_once或者require_once

f.其它:
在 php 4.0.2 之前適用以下規(guī)則:require() 總是會嘗試讀取目標文件,即使它所在的行根本就不會執(zhí)行。條件語句不會影響 require()。不過如果 require() 所在的行沒有執(zhí)行,則目標文件中的代碼也不會執(zhí)行。同樣,循環(huán)結構也不影響 require() 的行為。盡管目標文件中包含的代碼仍然是循環(huán)的主體,但 require() 本身只會運行一次

php技術php基礎知識:控制結構,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲视频在线免费 | 9久久婷婷国产综合精品性色 | 久久久蜜桃一区二区人 | 国产特一级黄色片 | 在线看片网站 | 亚洲精品免费在线观看 | 色婷婷国产精品 | 国产精品美女久久久久久免费 | 伊人色综合久久久天天蜜桃 | 久久伊人精品一区二区三区 | 久久久69| 久久国产精品精品国产色婷婷 | 欧美精品一二三 | 久久精彩 | 亚洲视频在线看 | 一级黄色影片在线观看 | 日韩av视屏| 99热99| 日日骚视频 | 香蕉久久久| 天堂一区二区三区四区 | 黄色中文字幕 | 国产美女精品视频 | 91精品国产日韩91久久久久久 | 黄色大片免费网站 | 中文字幕欧美日韩一区 | 国久久| 久久久久久高清 | 麻豆av一区二区三区久久 | 春色av| 国产成人精品一区二区三区视频 | 热99精品视频 | 一级片网址 | 1区2区视频 | 精品国产一区二区三区日日嗨 | av av在线| 中文字幕97 | 亚洲一区二区三区视频免费观看 | 蜜臀网| 日韩精品一区二区在线 | 国产精品精品久久久 |