ホームページ  >  記事  >  バックエンド開発  >  プロセス制御 - PHP マニュアルノート

プロセス制御 - PHP マニュアルノート

WBOY
WBOYオリジナル
2016-08-08 09:29:15984ブラウズ

スクリプトはステートメントで構成されており、ステートメントはプロセス制御に依存して関数を実装します。このセクションでは主にいくつかのキーワードの使用方法を紹介します。

エルセイフ

elseifelse if的行为完全一样,如果用冒号来定义if/elseif条件,那就不能用两个单词的else if、そうでない場合、PHP は解析エラーを生成します。

リーリー

代替構文

次のキーワードでは、フロー制御の代替構文を使用できます。基本的な形式は、左中括弧をコロンに置き換え、右中括弧を次の文字に置き換えることです。

リーリー

注意! PHP では、同じ制御ブロック内で 2 つの構文を混合することはサポートされていません。

しながら

このループは一見すると見覚えがあるように見えますが、その用途のいくつかは見落とされています。

マニュアルには、経験豊富な C 言語ユーザーは別の do-while循环用法,把语句放在do-while(0) に精通している可能性があると記載されています。この手法については初めて知りましたが、私はまだ C 言語の初心者のようです。

ところで、この特別な使い方の利点を検索して整理してみましょう。 do-while(0)

    コードのチャンク化は、単に中括弧を使用するよりも直感的です。

  1. コードの残りのセクションをスキップするには、
  2. を使用します。 break
  3. マクロ定義関数を使用するときに文の最後にセミコロンを追加すると、より関数呼び出しのように見えます。

  4. ブロックレベルのスコープは、変数名が上位レベルのスコープに広がるのを防ぎます。

  5. 変換された
  6. ステートメント。 goto
この投稿では、do{}while(0) - C++ - SegmentFault の役割について詳しく説明しています。{}

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

注意! PHPのループ構造。

switch语句被认为是可以使用continueスイッチ

マニュアルには、PHP は他の言語とは異なると記載されています。switch に対する continue ステートメントの効果は

と似ています。それはどういう意味ですか?

continue语句作用到switch上的作用类似于break

ステートメントの後のコロン。

switch/case做的是松散比较==,而不是严格比较===。效率方面,switch语句中条件只求值一次并用来和每个case语句比较。case表达式可以是任何求值为简单类型的表达式,不能用数组或对象。允许使用分号代替case宣言する

構造は、コードの実行命令を設定するために使用されます。構文構造は次のとおりです。 リーリー

directive セクションでは、declarecode セグメントの動作を設定できます。現在、ticksencoding の 2 つのコマンドのみが認識されます。

構造体はグローバル スコープでも使用でき、有効期限が切れた後はすべてのコードに影響します。ただし、

構造を持つファイルが他のファイルにインクルードされている場合、そのファイルを含む親ファイルでは機能しません。 directive部分允许设定declare代码段的行为,目前只认识两个命令:ticksencodingdeclare结构也可用于全局范围,影响到期后的所有代码。但如果有declare

Tick (クロック サイクル) は、インタープリターが

コード セグメント内の N 個の時間指定可能な低レベル ステートメントを実行するたびに発生するイベントです。各ティックで発生するイベントは、register_tick_function() によって指定されます。使い方は大まかに以下の通りです。 declare代码段中解释器每执行N条可计时的低级语句就会发生的事件。在每个tick中出现的事件由register_tick_function()

&lt;code&gt;declare(ticks = 1);
function tick_handler() {
	echo &quot;tick_hander() called.\n&quot;;
}
register_tick_function('tick_hander');&lt;/code&gt;

可计时的低级语句有很多,register_tick_function()后会调用一次周期事件,每条语句后会调用一次周期事件,花括号结束时会调用一次周期事件。

注意,PHP中表达式不能用逗号隔开,不然会出现语法错误。这点与C语言不同,刚注意到。

可以用encoding指令来对每段脚本指定其编码方式。用法如下:

&lt;code&gt;declare(encoding = 'ISO-8859-1);&lt;/code&gt;

return

如果是在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被include或者require,则控制交回调用文件。如果当前脚本时被include的,则return的值会被当作include调用的返回值,那require呢?

require

requireinclude几乎完全一样,除了处理失败的方式不同之外。

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中返回的内容输出。

&lt;code&gt;&lt;?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;&lt;/code&gt;

因为includerequire是一种特殊的语言结构,其参数不需要括号。如果文件被包含两次,PHP会发出致命错误,因为函数已经被定义。推荐使用include_once

require_once

require_once语句和require语句完全相同,唯一区别是,PHP会检查该文件是否已经被包含过,如果是则不会再次包含。

include_once

include_once语句和include语句类似,唯一区别是如果该文件已经被包含过,则不会再次包含。

goto

goto操作符用于跳转到程序的另一位置,目标位置可以用目标名称加上冒号来标记。PHP中的goto有一定限制,目标位置只能位于同一个文件和作用域。也就是说无法跳出一个函数或类方法,也无法跳入到任何循环或者switch结构。

(全文完)

以上就介绍了流程控制 - PHP手册笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。