検索
ホームページバックエンド開発PHPチュートリアルphpのgoto文のメリット・デメリットを詳しく解説

phpのgoto文のメリット・デメリットを詳しく解説

May 15, 2018 pm 03:54 PM
gotophp長所と短所詳しい説明声明

gotoとcallの違いが分からない子だと一目で分かります

その後、グループ内でコードを入力する際、子猫はDo...LoopLoopを使用しており、子供グループで「ループとは何ですか?」と尋ねました。 -_-|||その結果、あるグループは Do...Loop ループをほとんど使用せず、Goto を使用することを好むと言いました。これは、Goto が使用できないという意味ではありません。しかし、Goto はあまり使われていません。 ! !

くだらない話はこれくらいにして、本題に入りましょう

まず、Gotoと初心者向けコールの違いを説明します

Gotoはコードをジャンプするために使用されます。つまり、コードがGotoに実行されると、指定された場所にジャンプしますRem によって下向きに実行されます。完了しても Goto ステートメントの次のステートメントには戻りません。

Call はコードをジャンプするためにも使用されますが、より正確に言うと、Call はサブルーチンを呼び出すために使用されます。通話とは何ですか?つまり、Call が実行されると、指定されたサブルーチン (Sub) がコード内に配置され、サブルーチンが実行されると、 Call ステートメントの次の行に戻り、下方向に実行され続けます。

わかりにくい場合は、先ほどのクラスメートのコードを使用して説明しましょう:

これは Goto ステートメントです

これは Call ステートメントです

1.      a=15
2.      b=10
3.      if a-b < 15
4.          goto sub1//跳转至Rem sub1处,且不会再跳回来了!!!
5.          if a-b > -15
6.              goto sub2
7.          end if
8.      end if
9.       
10.   Rem sub2
11.   MsgBox "a-b大于-15"
12.    
13.   Rem sub1
14.   MsgBox "a-b小于15"//脚本到底部了,执行结束!!!
りー


OK、2 つの違いは明確に説明されました。ここで、Goto ステートメントの長所と短所について話しましょう。 ! !

上で述べたように、私は Goto の使用を減らし、絶対に乱用しないことを主張します。主な理由の 1 つは、Goto ステートメントが 1 つまたは 2 つ使用すると、プログラムの構造を破壊し、プログラムが読みにくくなる可能性があることです。大きな影響はありませんが、12 個の Goto を使用するとどうなるでしょうか?

次の段落は百度百科事典からの引用です (多すぎると思われる場合は、「goto ステートメントの結果」セクションだけを参照してください)

問題の起源:

1960 年代半ば以降、コンピュータのハードウェア技術はますます進歩しており、コンピューティングの記憶容量、計算速度、信頼性は大幅に向上し、ハードウェアの製造コストは継続的に削減されています。コンピュータの価格の低下により、コンピュータが広く使用されるための優れた条件が整いました。このような状況では、コンピュータ ソフトウェアもそれに適応することが急務となっています。したがって、大規模なソフトウェア システムを開発するためのいくつかの要件が提案されています。しかし、ソフトウェア技術の進歩が時代のニーズに応えられない状況が続いており、大規模ソフトウェアの開発プロセスでは、「複雑さの高さ」「開発サイクルの長期化」「精度の確保の難しさ」という3つの大きな問題が生じています。 。遭遇した問題に対する解決策がなく、問題が山積し、人間が制御するのが困難な状況が形成される、いわゆる「ソフトウェア危機」が発生します。この危機を乗り越えるためには、プログラミング方法、プログラムの正確性、ソフトウェアの信頼性などの問題について一連の研究を行う必要がある一方で、ソフトウェアの方法についても研究を行う必要があります。準備、テスト、保守、管理を行い、プログラミング方法論を生み出します。

goto文が有害であるという見解:

1968年、E.W.ダイクストラが初めて「GOTO文は有害である」という議論を提唱し、従来のプログラミング手法に疑問を呈し、プログラミング手法に関する議論に対する人々の一般的な重視を呼び起こしました。

Goto ステートメントの議論:

1960 年代後半から 1970 年代初頭にかけて、GOTO ステートメントの使用について激しい議論がありました。高級プログラミング言語から GOTO ステートメントを削除することを主張する人々は、GOTO ステートメントがプログラム構造に最も大きな影響を与える有害なステートメントであると信じています。その主な理由は、GOTO ステートメントが静的構造と動的構造を作成するためです。プログラムに一貫性がないため、プログラムの理解とトラブルシューティングが困難になります。 GOTO ステートメントを削除すると、プログラムの実行プロセスをプログラム構造から直接反映できます。このようにして、プログラムの構造が明確になり、理解しやすくなり、エラーチェックが容易になるだけでなく、プログラムの正しさを証明するのにも役立ちます。 これに反対する人は、GOTO ステートメントの方がより柔軟に使用でき、場合によってはプログラムの効率を向上させることができると信じています。 GOTO文を完全に削除するとプログラムが複雑になり、無駄な計算が増えてしまう場合があります。

goto ステートメントの解決策について:

1974 年、D.E. Knuth は GOTO ステートメント論争を包括的かつ公正にレビューしました: 彼の基本的なポイントは、

GOTO を制限なく使用する ステートメント、特に です。ジャンプバックを使用する GOTO ステートメントは、プログラム構造を理解しにくくするため、GOTO ステートメントの使用を避けるようにしてください。 しかし、他の場合には、プログラムの優れた構造を破壊することなくプログラムの効率を向上させるために、いくつかの GOTO ステートメントを制御された方法で使用する必要があります。彼の言葉を借りれば、「ある場合には、私はGOTOステートメントの削除を主張し、またある場合には、GOTOステートメントの導入を主張する。」それ以来、この10年にわたる論争は決着した。 その後、G. ジャコッピーニと C. ベームは、あらゆるプログラムが逐次構造、分岐構造、繰り返し構造によって表現できることを理論的に証明しました。この結論は、高級プログラミング言語から GOTO ステートメントを削除しても、高級プログラミング言語のプログラミング機能には影響せず、作成されたプログラムの構造がより明確になることを示しています。 [/hide]

goto

ステートメントの結果:

gotoステートメントはC/C++などの高度な

プログラミング言語で予約されていますが、使用しないことをお勧めします。それを使用するか、控えめに使用するか。 Java などの一部の 更新された

高水準プログラミング言語では、goto ステートメントをキーワードとして指定しますが、その使用はサポートされていないため、プログラムは簡潔で読みやすくなります。 goto ステートメントは引き続きサポートされています。goto ステートメントの利点の 1 つは、プログラムが確実に一意の終了を持ち、大きすぎる if のネストを回避できることです。

如果有仔细看上面这段话的同学,相信能明白goto语句的利与弊了吧?

好吧,还是用代码来解释:

滥用goto语句的例子

合理利用goto语句

1.      Rem A
2.      If  false
3.          goto   B
4.      End If
5.       
6.      Rem C
7.      if true
8.          goto  A
9.      ElseIf false
10.       goto   B
11.   else   
12.       goto   C
13.   End If
14.    
15.   Rem B
16.   //这样的代码可读吗,你可以划出流程图吗。而且goto完全是可以用其他语句代替的。
1.      Do
2.          Do
3.              Do
4.                  If  true
5.                      Goto 停止//利用goto跳出深层嵌套
6.                  End If
7.              Loop
8.          Loop
9.      Loop
10.    
11.   Rem 停止


讲解就到这里了,小猫的想法就是建议大家如果能不用goto就不用goto,尽量多使用Call,如果想跳出循环,每种循环都有对应的跳出语句,如exit do,exit for,exit sub,Exit Function
另外当大家需要用到循环时,建议使用Do...Loop和For...Next两者,而while循环比较绕口,完全可以用do和for代替他

以上がphpのgoto文のメリット・デメリットを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッション固定攻撃をどのように防ぐことができますか?セッション固定攻撃をどのように防ぐことができますか?Apr 28, 2025 am 12:25 AM

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションレス認証をどのように実装しますか?セッションレス認証をどのように実装しますか?Apr 28, 2025 am 12:24 AM

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションに関連するいくつかの一般的なセキュリティリスクは何ですか?PHPセッションに関連するいくつかの一般的なセキュリティリスクは何ですか?Apr 28, 2025 am 12:24 AM

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションをどのように破壊しますか?PHPセッションをどのように破壊しますか?Apr 28, 2025 am 12:16 AM

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスをどのように変更できますか?PHPのデフォルトセッションの保存パスをどのように変更できますか?Apr 28, 2025 am 12:12 AM

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

PHPセッションに保存されているデータをどのように変更しますか?PHPセッションに保存されているデータをどのように変更しますか?Apr 27, 2025 am 12:23 AM

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

PHPセッションに配列を保存する例を示します。PHPセッションに配列を保存する例を示します。Apr 27, 2025 am 12:20 AM

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

Garbage CollectionはPHPセッションでどのように機能しますか?Garbage CollectionはPHPセッションでどのように機能しますか?Apr 27, 2025 am 12:19 AM

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター