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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

流程控制 - PHP手册笔记

發布時間:2025/7/14 php 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 流程控制 - PHP手册笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
流程控制 - PHP手冊筆記 原文:流程控制 - PHP手冊筆記

腳本由語句構成,語句靠流程控制實現功能,這一節主要介紹了幾個關鍵字的使用。

elseif

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

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

替代語法

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

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

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

do-while

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

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

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

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

    foreach

    foreach僅能夠應用于數組和對象的遍歷。foreach語法結構提供了遍歷數組的簡單方式,有下面兩種語法。

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

    要修改數組元素的值需要使用引用賦值,通過在$value前加&實現。

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

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

    list-each

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

    當foreach開始執行時,數組內部的指針會自動指向第一個單元,因此不需要在foreach循環之前調用reset()。但是對于while中的list-each,數組內部指針$arr會一直存在著,因此在下次循環前需要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增添了遍歷一個數組的數組的功能,并且把嵌套的數組解包到循環變量中。

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

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

    break

    break用來結束當前for/foreach/while/do-while/switch結構的執行。break可以接受一個可選的數字參數來決定跳出幾重循環,但參數不能為變量。

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

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

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

    continue

    與break相似,continue也可以接受一個可選的數字參數來決定跳過幾重循環到循環結尾。

    注意!在PHP中switch語句被認為是可以使用continue的一種循環結構。

    switch

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

    switch/case做的是松散比較==,而不是嚴格比較===。效率方面,switch語句中條件只求值一次并用來和每個case語句比較。case表達式可以是任何求值為簡單類型的表達式,不能用數組或對象。允許使用分號代替case語句后的冒號。

    declare

    declare結構用來設定一段代碼的執行指令,語法結構如下:

    declare(directive)statement

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

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

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

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

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

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

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

    return

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

    require

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

    require在出錯時產生E_COMPILE_ERROR級別的錯誤,腳本中止。而include只產生警告E_WARNING,腳本繼續執行。

    include

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

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

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

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

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

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

    因為include和require是一種特殊的語言結構,其參數不需要括號。如果文件被包含兩次,PHP會發出致命錯誤,因為函數已經被定義。推薦使用include_once。

    require_once

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

    include_once

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

    goto

    goto操作符用于跳轉到程序的另一位置,目標位置可以用目標名稱加上冒號來標記。PHP中的goto有一定限制,目標位置只能位于同一個文件和作用域。也就是說無法跳出一個函數或類方法,也無法跳入到任何循環或者switch結構。

    (全文完)

    posted on 2015-06-19 11:27 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

    轉載于:https://www.cnblogs.com/lonelyxmas/p/4588145.html

    總結

    以上是生活随笔為你收集整理的流程控制 - PHP手册笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。