国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

流程控制

2019-11-15 02:04:40
字體:
供稿:網(wǎng)友
流程控制 - php手冊筆記

腳本由語句構(gòu)成,語句靠流程控制實現(xiàn)功能,這一節(jié)主要介紹了幾個關(guān)鍵字的使用。

elseif

elseifelse if的行為完全一樣,如果用冒號來定義if/elseif條件,那就不能用兩個單詞的else if,否則PHP會產(chǎn)生解析錯誤。

<?php $a = 1;$b = 2;if($a > $b) :echo "$a is greater than $b";elseif($a == $b) :echo "$a equals $b";else :echo "$a is neither greater than or equal to $b";endif;
替代語法

下面的這些關(guān)鍵字可以使用流程控制的替代語法,基本形式是把左花括號換成冒號,右花括號換為下面的字符。

if - endifwhile - endwhilefor - endforforeach - endforeachswitch - endswitch

注意!PHP不支持在同一控制塊內(nèi)混合使用兩種語法。

do-while

這個循環(huán)乍看起來挺熟悉的,但是卻忽略了它的某些用法。

手冊中說,資深的C語言用戶可能熟悉另一種不同的do-while循環(huán)用法,把語句放在do-while(0)之中。我竟然第一次聽說有這種技巧,看來我還是C語言小白。

順便搜索整理一下do-while(0)這種特殊用法的好處吧。

  1. 代碼分塊,比僅僅使用花括號更直觀。
  2. 使用break跳過剩余的一段代碼。
  3. 有利于宏定義函數(shù),使用時句尾可以加分號,看起來更像函數(shù)調(diào)用。
  4. 塊級作用域,避免變量名擴散到上層作用域。
  5. 變形的goto語句。

這個帖子講的挺好的,do{}while(0) 的作用 - c++ - SegmentFault。

foreach

foreach僅能夠應(yīng)用于數(shù)組和對象的遍歷。foreach語法結(jié)構(gòu)提供了遍歷數(shù)組的簡單方式,有下面兩種語法。

foreach(array_exPRession as $value)statementforeach(array_expression as $key => $value)statement

要修改數(shù)組元素的值需要使用引用賦值,通過在$value前加&實現(xiàn)。

<?php $arr = array(1, 2, 3, 4);foreach($arr as &$value) {$value = $value * 2;}unset($value);foreach($arr as $value) {echo "$value ";  // 2 4 6 8}

注意!數(shù)組最后一個元素的$value引用在foreach循環(huán)之后仍會保留,建議使用unset()將其銷毀。

list-each

在示例程序中,還發(fā)現(xiàn)了一種特殊的遍歷方法,姑且稱作list-each

當(dāng)foreach開始執(zhí)行時,數(shù)組內(nèi)部的指針會自動指向第一個單元,因此不需要在foreach循環(huán)之前調(diào)用reset()。但是對于while中的list-each,數(shù)組內(nèi)部指針$arr會一直存在著,因此在下次循環(huán)前需要reset($arr)

<?php $arr = array('one', 'two', 'three');// reset($arr);while(list($key, $value) = each($arr)) {echo "Key: $key; Value: $value ";}reset($arr);while(list($key, $value) = each($arr)) {echo "Key: $key; Value: $value ";}

在上面這段代碼中,第一個reset可以省略,但第二個reset不能省。

list

PHP 5.5增添了遍歷一個數(shù)組的數(shù)組的功能,并且把嵌套的數(shù)組解包到循環(huán)變量中。

<?php $array = [[1, 2],[3, 4],];foreach($array as list($a, $b)) {echo "A: $a; B: $b";}

list()中的單元可以少于嵌套數(shù)組的,此時多出來的數(shù)組單元將被忽略。若多于,將發(fā)出錯誤信息。

break

break用來結(jié)束當(dāng)前for/foreach/while/do-while/switch結(jié)構(gòu)的執(zhí)行。break可以接受一個可選的數(shù)字參數(shù)來決定跳出幾重循環(huán),但參數(shù)不能為變量。

break跳出多重循環(huán)還是第一次遇到,特意寫了個小程序嘗試了一下。

<?php while(1) {while(1) {echo 'hello ';break 2;}}echo 'world';

特地在C語言里嘗試了一下,提示語法錯誤。

continue

break相似,continue也可以接受一個可選的數(shù)字參數(shù)來決定跳過幾重循環(huán)到循環(huán)結(jié)尾。

注意!在PHP中switch語句被認(rèn)為是可以使用continue的一種循環(huán)結(jié)構(gòu)。

switch

手冊中說,PHP和其它語言不同,continue語句作用到switch上的作用類似于break。這是什么意思呢?

switch/case做的是松散比較==,而不是嚴(yán)格比較===。效率方面,switch語句中條件只求值一次并用來和每個case語句比較。case表達式可以是任何求值為簡單類型的表達式,不能用數(shù)組或?qū)ο蟆T试S使用分號代替case語句后的冒號。

declare

declare結(jié)構(gòu)用來設(shè)定一段代碼的執(zhí)行指令,語法結(jié)構(gòu)如下:

declare(directive)statement

directive部分允許設(shè)定declare代碼段的行為,目前只認(rèn)識兩個命令:ticksencodingdeclare結(jié)構(gòu)也可用于全局范圍,影響到期后的所有代碼。但如果有declare結(jié)構(gòu)的文件被其它文件包含,則對包含它的父文件不起作用。

Tick(時鐘周期)是一個在declare代碼段中解釋器每執(zhí)行N條可計時的低級語句就會發(fā)生的事件。在每個tick中出現(xiàn)的事件由register_tick_function()來指定。用法大致如下。

declare(ticks = 1);function tick_handler() {echo "tick_hander() called./n";}register_tick_function('tick_hander');

可計時的低級語句有很多,register_tick_function()后會調(diào)用一次周期事件,每條語句后會調(diào)用一次周期事件,花括號結(jié)束時會調(diào)用一次周期事件。

注意,PHP中表達式不能用逗號隔開,不然會出現(xiàn)語法錯誤。這點與C語言不同,剛注意到。

可以用encoding指令來對每段腳本指定其編碼方式。用法如下:

declare(encoding = 'ISO-8859-1);
return

如果是在全局范圍中調(diào)用,則當(dāng)前腳本文件中止運行。如果當(dāng)前腳本文件是被include或者require,則控制交回調(diào)用文件。如果當(dāng)前腳本時被include的,則return的值會被當(dāng)作include調(diào)用的返回值,那require呢?

require

requireinclude幾乎完全一樣,除了處理失敗的方式不同之外。

require在出錯時產(chǎn)生E_COMPILE_ERROR級別的錯誤,腳本中止。而include只產(chǎn)生警告E_WARNING,腳本繼續(xù)執(zhí)行。

include

include語句包含并運行指定文件,這里要注意一下指定文件的尋找次序。

  • 被包含文件先按參數(shù)給出的路徑尋找。如果定義了路徑,include_path會被完全忽略。
  • 如果沒有給出目錄(只有文件名)時則按照include_path指定的目錄尋找。若沒找到才在調(diào)用腳本文件所在目錄和當(dāng)前工作目錄下尋找。那么問題來了,調(diào)用腳本文件所在目錄和當(dāng)前工作目錄有什么區(qū)別呢?
  • 如果最后仍未找到文件,則include結(jié)構(gòu)會發(fā)出一條警告,require結(jié)構(gòu)會發(fā)出一個致命錯誤。

當(dāng)一個文件被包含時,其中包含的代碼繼承了include所在行的變量范圍。從該處開始,被調(diào)用文件中定義的變量才可在調(diào)用文件中使用。當(dāng)一個文件被包含時,語法解析器在目標(biāo)文件的開頭脫離PHP模式并進入HTML模式,當(dāng)文件結(jié)尾回復(fù)。

對于返回值,在失敗時include返回FALSE并且發(fā)出警告。成功的包含則返回1,除非在包含文件中另外給出了返回值。如果在包含文件中定義有函數(shù),這些函數(shù)不管是在return之前還是之后定義的,都可以獨立在主文件中使用。

如果來自遠程服務(wù)器的文件應(yīng)該在遠端運行而只輸出結(jié)果,那用readfile()函數(shù)更好。另一種將PHP文件包含到一個變量中的方法是用輸出控制函數(shù)結(jié)合include來捕獲其輸出。第一次遇到,比較陌生。下面這段代碼能將腳本vars.php中返回的內(nèi)容輸出。

<?php $string = get_include_contents('vars.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;}echo $string;

因為includerequire是一種特殊的語言結(jié)構(gòu),其參數(shù)不需要括號。如果文件被包含兩次,PHP會發(fā)出致命錯誤,因為函數(shù)已經(jīng)被定義。推薦使用include_once

require_once

require_once語句和require語句完全相同,唯一區(qū)別是,PHP會檢查該文件是否已經(jīng)被包含過,如果是則不會再次包含。

include_once

include_once語句和include語句類似,唯一區(qū)別是如果該文件已經(jīng)被包含過,則不會再次包含。

goto

goto操作符用于跳轉(zhuǎn)到程序的另一位置,目標(biāo)位置可以用目標(biāo)名稱加上冒號來標(biāo)記。PHP中的goto有一定限制,目標(biāo)位置只能位于同一個文件和作用域。也就是說無法跳出一個函數(shù)或類方法,也無法跳入到任何循環(huán)或者switch結(jié)構(gòu)。

(全文完)


上一篇:運算符

下一篇:函數(shù)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 布尔津县| 宁远县| 宁阳县| 沈阳市| 儋州市| 林芝县| 儋州市| 海晏县| 怀安县| 镇赉县| 淄博市| 加查县| 中卫市| 龙里县| 儋州市| 安达市| 铜梁县| 宿松县| 永靖县| 汕头市| 灌南县| 综艺| 宾阳县| 平度市| 汝南县| 西安市| 屯门区| 荥阳市| 神农架林区| 郧西县| 宜昌市| 兰溪市| 邹城市| 碌曲县| 阿合奇县| 晋城| 攀枝花市| 闽侯县| 疏附县| 涞水县| 大丰市|