スクリプトはステートメントで構成されており、ステートメントはプロセス制御に依存して関数を実装します。このセクションでは主にいくつかのキーワードの使用方法を紹介します。
エルセイフ
elseif
和else if
的行为完全一样,如果用冒号来定义if/elseif
条件,那就不能用两个单词的else if
、そうでない場合、PHP は解析エラーを生成します。
代替構文
次のキーワードでは、フロー制御の代替構文を使用できます。基本的な形式は、左中括弧をコロンに置き換え、右中括弧を次の文字に置き換えることです。
リーリー注意! PHP では、同じ制御ブロック内で 2 つの構文を混合することはサポートされていません。
しながら
このループは一見すると見覚えがあるように見えますが、その用途のいくつかは見落とされています。
マニュアルには、経験豊富な C 言語ユーザーは別の do-while
循环用法,把语句放在do-while(0)
に精通している可能性があると記載されています。この手法については初めて知りましたが、私はまだ C 言語の初心者のようです。
ところで、この特別な使い方の利点を検索して整理してみましょう。 do-while(0)
break
goto
foreach
構文構造は、配列を走査するための簡単な方法を提供します。以下の 2 つの構文があります。 foreach
仅能够应用于数组和对象的遍历。foreach
リーリー
で実装されている参照割り当てを使用する必要があります。 $value
前加&
リーリー
はそれを破棄します。 $value
引用在foreach
循环之后仍会保留,建议使用unset()
サンプル プログラムでは、特別なトラバーサル メソッドも見つかりました。それを
と呼びます。 list-each
foreach
の実行が開始されると、配列内のポインターは自動的に最初のユニットを指すようになります。そのため、foreach の前に <code>reset()
を呼び出す必要はありません。コード>ループ>。ただし、while
の の場合、配列内部ポインター $arr
は常に存在するため、次のループの前に reset($arr)
が必要です。 foreach
开始执行时,数组内部的指针会自动指向第一个单元,因此不需要在foreach
循环之前调用reset()
。但是对于while
中的list-each
,数组内部指针$arr
会一直存在着,因此在下次循环前需要reset($arr)
リーリー
は省略できません。 reset
可以省略,但第二个reset
PHP 5.5 では、配列の配列を反復処理し、ネストされた配列をループ変数に解凍する機能が追加されています。
リーリー
のセルの数は、ネストされた配列のセルの数より少なくてもかまいません。その場合、余分な配列のセルは無視されます。それ以上ある場合は、エラー メッセージが発行されます。 list()
は、現在の for/foreach/while/do-while/switch
構造の実行を終了するために使用されます。 break
用来结束当前for/foreach/while/do-while/switch
结构的执行。break
オプションの数値パラメーターを受け入れて、ループから抜け出す回数を決定できますが、パラメーターを変数にすることはできません。
break
複数のループから抜け出すのは初めてなので、特別に小さなプログラムを書いて試してみました。
特別にC言語で試してみたところ、構文エラーが発生しました。
続ける
と同様に、 continue
もオプションの数値パラメーターを受け入れて、ループの最後までスキップするループの数を決定できます。 break
相似,continue
switch
语句被认为是可以使用continue
スイッチ
マニュアルには、PHP は他の言語とは異なると記載されています。switch
に対する continue
ステートメントの効果は
continue
语句作用到switch
上的作用类似于break
switch/case
做的是松散比较==
,而不是严格比较===
。效率方面,switch
语句中条件只求值一次并用来和每个case
语句比较。case
表达式可以是任何求值为简单类型的表达式,不能用数组或对象。允许使用分号代替case
宣言する
directive
セクションでは、declare
code セグメントの動作を設定できます。現在、ticks
と encoding
の 2 つのコマンドのみが認識されます。
構造を持つファイルが他のファイルにインクルードされている場合、そのファイルを含む親ファイルでは機能しません。 directive
部分允许设定declare
代码段的行为,目前只认识两个命令:ticks
和encoding
。declare
结构也可用于全局范围,影响到期后的所有代码。但如果有declare
コード セグメント内の N 個の時間指定可能な低レベル ステートメントを実行するたびに発生するイベントです。各ティックで発生するイベントは、register_tick_function()
によって指定されます。使い方は大まかに以下の通りです。 declare
代码段中解释器每执行N条可计时的低级语句就会发生的事件。在每个tick中出现的事件由register_tick_function()
<code>declare(ticks = 1); function tick_handler() { echo "tick_hander() called.\n"; } register_tick_function('tick_hander');</code>
可计时的低级语句有很多,register_tick_function()
后会调用一次周期事件,每条语句后会调用一次周期事件,花括号结束时会调用一次周期事件。
注意,PHP中表达式不能用逗号隔开,不然会出现语法错误。这点与C语言不同,刚注意到。
可以用encoding指令来对每段脚本指定其编码方式。用法如下:
<code>declare(encoding = 'ISO-8859-1);</code>
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
中返回的内容输出。
<code><?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;</code>
因为include
和require
是一种特殊的语言结构,其参数不需要括号。如果文件被包含两次,PHP会发出致命错误,因为函数已经被定义。推荐使用include_once
。
require_once
require_once
语句和require
语句完全相同,唯一区别是,PHP会检查该文件是否已经被包含过,如果是则不会再次包含。
include_once
include_once
语句和include
语句类似,唯一区别是如果该文件已经被包含过,则不会再次包含。
goto
goto
操作符用于跳转到程序的另一位置,目标位置可以用目标名称加上冒号来标记。PHP中的goto
有一定限制,目标位置只能位于同一个文件和作用域。也就是说无法跳出一个函数或类方法,也无法跳入到任何循环或者switch
结构。
(全文完)
以上就介绍了流程控制 - PHP手册笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。