私はPHP用のコードアナライザを作成していますが、フレームワーク/スクリプトで "goto"命令を実際に使用する例を探しています。PHPでの実際の使用方法
これまでのところ、私はいくつかだけmarginal usage in Symfony testing suiteを見つけました。 この言語機能はユーザーランドではまったく使用されていないようですか?それともどこかに存在しますか?
私はPHP用のコードアナライザを作成していますが、フレームワーク/スクリプトで "goto"命令を実際に使用する例を探しています。PHPでの実際の使用方法
これまでのところ、私はいくつかだけmarginal usage in Symfony testing suiteを見つけました。 この言語機能はユーザーランドではまったく使用されていないようですか?それともどこかに存在しますか?
は最近、私はレガシー[オーダーメイド] PHP部分OOと部分MCVのframworkを継承した新しい雇用で仕事を始めました。いくつかのページでは、ビューは実際に何も表示せずにビジネスロジックを十分に実行していました。毎回、これらのフラットなPHPファイル(include_once()
ではなく)が含まれていたので、サイトの多くの部分がスパゲッティと肉球タイプのスクリプト(GOTO
がそうであるとされているものが悪い練習と見なされる)でした。
何が起こっていたかは、必要でないときに(何回も複数の場所に)含まれていたロジックが発生していて、1行または1つの文ブロックが必要だったためPHPの何百もの行のファイル全体。
エンドポイントを作成してgoto END;
を追加することは、エラーログを減らしたり、必要でないときにスクリプトのこれらのビットを停止させたりするのを防ぐための暫定的なステップでした。例:
if(empty($userRequest)){
goto END;
}
## The rest of the script from this point needs to fire until...
if(empty($_REQUEST['user_id'])){
goto END;
}
## etc...
もちろん、スパゲッティの量を実際に減らすための暫定的なステップです。また、必要な機能をコントローラークラスに移行しました(実際には、想定されるビューファイルがデータモデリングを行っていたモデルを作成しました)。
私は同じ結果を達成するためにIF...ELSE
文のブロックに追加されている可能性がありますが、スクリプト内のロジックの量(およびネストされたIF
文等...)の量はgoto END;
に追加すると、実際にスクリプトがより読みやすく作られていることを意味し他のrefatoringが起こっている間。
最終的に、すべてのレガシースパゲッティを解凍したら、GOTO
ステートメントを削除し、完全にMVCとOOにする必要があります。
がgoto
を使用した例である:
<?php
ten:
print "Hello ";
goto ten;
あなたは正しいです近代的なプログラミングの知恵は、それが「スパゲッティコード」につながることを言うので、それはPHPプログラミングで使用されることはほとんどありませんこれはデバッグがより困難です。
しかし、マシンレベルの言語で(goto
が実際にあるものである)非条件付きループを使用しないようにしてください。数年前にMIPアセンブリで非条件ループを使用したことを覚えています。
私が必要とするのは、マニュアル/ rfc/testの例ではなく、フレームワーク/ –
非OOスクリプトでは、関数がパラメータを必要とせず、値を返すことが期待されない場合、 'function name()'を単に 'name:'に置き換えることができます。それは私が考えることができるほど真実です。明らかに、スクリプトの「中断」や何か、あるいは一部を続けなければならないでしょう。 –
私はいくつかの私のPHPスクリプトを 'GOTO'を使うように変換しようとしています。 –
http://stackoverflow.com/questions/46586/goto-still-considered-harmful – Andy
http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/ –
はい、知っている。この点は、gotoの長所と短所に異議を唱えることではなく、実際の使用例(マニュアル/ rfcの例やPHPのテストではない)を見つけることです。 –