6

PHP に、「?>」タグに到達する前にプロセスを終了できる機能があるかどうか疑問に思っていました。例:

<?php

    echo 'first';

    endphptag();

    echo 'second';

?>

third

<?php

    echo 'fourth';

?>

次に、出力は次のようになります。

first

third

fourth

一部の人々はこれを役に立たないと考えていることを知っていますが、dieorexit関数を使用する代わりに iframe の検証スクリプトに対して実行したいのは、スクリプト全体を強制終了するためです。その一部を終了したいだけです。

通常はif - else代わりに使用しますが、プロセスが大きく、より読みやすいものが必要なため、避けたいと思いますif - die.ajaxスクリプトで使用し、iframeでもこのようなものを使用したいので、ありがとうございます!


PHP に適切な機能が既にあるかどうかを知りたかっただけです (そうではないようです)。 " (例: try - catches はあまりにも多くのリソースを使用します。どちらも実行するつもりはありません)。私の疑問はそれだけでした.die関数を使用してajaxファイルでこの手順を使用するだけです(推奨されるかどうかはわかりませんが、PHPは何らかの理由でそれを持っている必要があるため、問題はないと思います)

4

5 に答える 5

4

例外はあなたが探しているものです:

try {
    // code
} catch (Exception $e) {
    // handling
}

コードを try ブロック内に配置し、 で例外をスローしてthrow new Exception();終了し、try ブロック内の残りのコードのみを終了します。

コードは次のようになります。

<?php
    try {
        echo 'first';
        throw new Exception();
        echo 'second';
    } catch (Exception $e) {}
?>
third
<?php
    echo 'fourth';
?>
于 2012-12-26T18:17:09.227 に答える
2

私はこれを捨ててアヒルにするつもりですが、本当にこれを行う必要がある場合gotoは、実際には悪い選択肢ではありません:

<?php

    echo 'first';

    goto endofblock;

    echo 'second';

endofblock:

?>

または、フェイクループを使用してgotoの「悪」を回避することもできます。コンパイラーにとって、それらは基本的に同じように見えますが、他のプログラマーは、使用するためにあなたを死に追いやることはありませんgoto

<?php
do {
    echo 'first';

    break;

    echo 'second';
} while (false)        
?>
于 2012-12-26T18:22:26.573 に答える
1

なぜスイッチやケースを使わないのですか?

于 2012-12-26T18:17:04.277 に答える
0

PHPインタープリターは、ファイルを1つの単位として処理し<?phpます。タグは、コメントと同様に、無視するテキストの一部(タグの外側)を指定するだけです。タグはコードのどの部分にも隣接していません。gotoですから、あなたの場合、その声明は正しい選択肢かもしれないと思います。または、コードをに入れることができる場合はfunction、を使用できますreturn

于 2012-12-26T18:41:20.270 に答える
0

もし私があなたなら、end-php タグを省略します。ここで説明するには長すぎる理由から、ほとんどのコーディング標準はこれを推奨していません。

しかし、それはさておき、if/else または switch/case 制御構造を使用してください。OOP を使用している場合は、検証プロセスの大部分をインライン コードから取り出して、関数またはクラス メソッドにパッケージ化します。

GOTO に関するこのメモも参照してください ;-) http://xkcd.com/292/

于 2012-12-26T18:33:18.663 に答える