日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

浅谈PHP语音里的流程控制及实现方法

發(fā)布時(shí)間:2025/3/15 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈PHP语音里的流程控制及实现方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

elseif

elseif和else if的行為完全一樣,如果用冒號(hào)來(lái)定義if/elseif條件,那就不能用兩個(gè)單詞的else if,否則PHP會(huì)產(chǎn)生解析錯(cuò)誤。

<?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;

替代語(yǔ)法

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

if - endif while - endwhile for - endfor foreach - endforeach switch - endswitch

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

do-while

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

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

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

  • 代碼分塊,比僅僅使用花括號(hào)更直觀。
  • 使用break跳過(guò)剩余的一段代碼。
  • 有利于宏定義函數(shù),使用時(shí)句尾可以加分號(hào),看起來(lái)更像函數(shù)調(diào)用。
  • 塊級(jí)作用域,避免變量名擴(kuò)散到上層作用域。
  • 變形的goto語(yǔ)句。
  • 這個(gè)帖子講的挺好的,do{}while(0) 的作用 - c++ - SegmentFault。

    foreach

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

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

    要修改數(shù)組元素的值需要使用引用賦值,通過(guò)在$value前加&實(shí)現(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ù)組最后一個(gè)元素的$value引用在foreach循環(huán)之后仍會(huì)保留,建議使用unset()將其銷毀。

    list-each

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

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

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

    list

    PHP 5.5增添了遍歷一個(gè)數(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í)多出來(lái)的數(shù)組單元將被忽略。若多于,將發(fā)出錯(cuò)誤信息。

    break

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

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

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

    特地在C語(yǔ)言里嘗試了一下,提示語(yǔ)法錯(cuò)誤。

    continue

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

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

    switch

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

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

    declare

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

    declare(directive)statement

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

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

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

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

    注意,PHP中表達(dá)式不能用逗號(hào)隔開,不然會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。這點(diǎn)與C語(yǔ)言不同,剛注意到。

    可以用encoding指令來(lái)對(duì)每段腳本指定其編碼方式。用法如下:

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

    return

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

    require

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

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

    include

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

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

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

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

    如果來(lái)自遠(yuǎn)程服務(wù)器的文件應(yīng)該在遠(yuǎn)端運(yùn)行而只輸出結(jié)果,那用readfile()函數(shù)更好。另一種將PHP文件包含到一個(gè)變量中的方法是用輸出控制函數(shù)結(jié)合include來(lái)捕獲其輸出。第一次遇到,比較陌生。下面這段代碼能將腳本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;

    因?yàn)閕nclude和require是一種特殊的語(yǔ)言結(jié)構(gòu),其參數(shù)不需要括號(hào)。如果文件被包含兩次,PHP會(huì)發(fā)出致命錯(cuò)誤,因?yàn)楹瘮?shù)已經(jīng)被定義。推薦使用include_once。

    require_once

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

    include_once

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

    goto

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

    (全文完)

    淺談PHP語(yǔ)音里的流程控制及實(shí)現(xiàn)方法

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

    elseif

    elseif和else if的行為完全一樣,如果用冒號(hào)來(lái)定義if/elseif條件,那就不能用兩個(gè)單詞的else if,否則PHP會(huì)產(chǎn)生解析錯(cuò)誤。

    <?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;

    替代語(yǔ)法

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

    if - endif while - endwhile for - endfor foreach - endforeach switch - endswitch

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

    do-while

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

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

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

  • 代碼分塊,比僅僅使用花括號(hào)更直觀。
  • 使用break跳過(guò)剩余的一段代碼。
  • 有利于宏定義函數(shù),使用時(shí)句尾可以加分號(hào),看起來(lái)更像函數(shù)調(diào)用。
  • 塊級(jí)作用域,避免變量名擴(kuò)散到上層作用域。
  • 變形的goto語(yǔ)句。
  • 這個(gè)帖子講的挺好的,do{}while(0) 的作用 - c++ - SegmentFault。

    淮安摜蛋下載(http://www.gamefrye.com/)

    foreach

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

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

    要修改數(shù)組元素的值需要使用引用賦值,通過(guò)在$value前加&實(shí)現(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ù)組最后一個(gè)元素的$value引用在foreach循環(huán)之后仍會(huì)保留,建議使用unset()將其銷毀。

    list-each

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

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

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

    list

    PHP 5.5增添了遍歷一個(gè)數(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í)多出來(lái)的數(shù)組單元將被忽略。若多于,將發(fā)出錯(cuò)誤信息。

    break

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

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

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

    特地在C語(yǔ)言里嘗試了一下,提示語(yǔ)法錯(cuò)誤。

    continue

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

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

    switch

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

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

    declare

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

    declare(directive)statement

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

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

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

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

    注意,PHP中表達(dá)式不能用逗號(hào)隔開,不然會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。這點(diǎn)與C語(yǔ)言不同,剛注意到。

    可以用encoding指令來(lái)對(duì)每段腳本指定其編碼方式。用法如下:

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

    return

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

    require

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

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

    include

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

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

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

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

    如果來(lái)自遠(yuǎn)程服務(wù)器的文件應(yīng)該在遠(yuǎn)端運(yùn)行而只輸出結(jié)果,那用readfile()函數(shù)更好。另一種將PHP文件包含到一個(gè)變量中的方法是用輸出控制函數(shù)結(jié)合include來(lái)捕獲其輸出。第一次遇到,比較陌生。下面這段代碼能將腳本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;

    因?yàn)閕nclude和require是一種特殊的語(yǔ)言結(jié)構(gòu),其參數(shù)不需要括號(hào)。如果文件被包含兩次,PHP會(huì)發(fā)出致命錯(cuò)誤,因?yàn)楹瘮?shù)已經(jīng)被定義。推薦使用include_once。

    require_once

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

    include_once

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

    goto

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

    (全文完)

    總結(jié)

    以上是生活随笔為你收集整理的浅谈PHP语音里的流程控制及实现方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。