PHP で堅牢なコードを開発する 2. 変数を効果的に使用する_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:29:04
オリジナル
895 人が閲覧しました

「Developing Robust Code with PHP」は、中規模から大規模のアプリケーションにおける現実の問題の解決に関する一連の記事です。この記事では、PHP のベテランである Amol Hatwar が、変数を効果的に使用する方法について説明します。また、スクリプト構成を簡素化するために、PHP で変更可能な変数名を使用して構成ファイル パーサーを構築する方法も示します。 前回の記事では、計画、設計、さらにはコードの作成時に考慮する必要があるいくつかの要素について説明しました。この記事では、実際のコードを実際に触って、動作の一部を確認します。前回の記事をまだ読んでいない場合は、今すぐ見てみることをお勧めします。 変数の正しい取り扱い 変数と関数は、あらゆるコンピューター言語の重要な要素です。変数を使用するとデータを抽象化でき、関数を使用するとコード行を抽象化できます。 Bruce Eckel が著書「C++ Programming Thoughts」で述べているように、すべてのプログラミング言語は抽象化を提供します。アセンブリ言語は、基礎となるマシンを小さな抽象化したものです。その後に登場したいわゆる命令型言語 (Fortran、BASIC、C など) の多くは、アセンブリ言語から抽象化されたものでした。 プログラミング言語が提供する抽象化の種類と質は、解決できる問題の複雑さに直接関係します。 PHP が変数や関数をどのように処理するかを理解すると、それらを効果的に使用するのに役立ちます。 名前には何が入っていますか? 以前の記事で述べたように、命名規則とコーディング規則は重要です。どのような命名規則を使用する場合でも、プロジェクト全体を通じて必ずその命名規則に厳密に従うようにしてください。最も広く使用されている命名規則を使用すると、コードはより多くの人に受け入れられます。 変数に名前を付けるときは、スクリプトを含めるときに使用している変数を上書きしないように特に注意してください。大規模なアプリケーションでは、これは新しい機能を追加する際の一般的なエラーの原因です。この問題を防ぐ最善の方法は、プレフィックスを使用することです。変数のモジュール名の省略形をプレフィックスとして使用します。たとえば、投票を処理するモジュールにユーザー ID を保持する変数がある場合、変数に $poll_userID または $pollUserID という名前を付けることができます。 PHP 変数について PHP はインタプリタ型言語です。これには多くの利点があり、そのうちのいくつかを活用する方法をすぐに学びます。最初の明白な利点は、設計、コード、コンパイル、テストのサイクルから解放され、エディターで作成したコードはすぐに使用できることです。ただし、最も重要な利点は、変数の型とメモリ内での変数の管理方法について心配する必要がないことです。スクリプトに割り当てられたすべてのメモリは、スクリプトの実行後に PHP によって自動的に回収されます。さらに、変数の型を知らなくても、変数に対して多くの操作を実行できます。リスト 1 のコードは PHP では完全に正常に動作しますが、C 言語と Java 言語では大量のエラー メッセージがスローされます: リスト 1. 変数を含むサンプル PHP コード PHP をインストールした後、実行中のコードを実行したい場合は、まず保存します。コードを .php ファイルとして保存し、そのファイルを Web サーバーに配置し、ブラウザでそのファイルを指定します。 CGI バージョンの PHP をインストールすることをお勧めします。次に、シェルまたはコマンド プロンプトで次のコマンドを入力してスクリプトを実行します。script-name はスクリプトを含むファイルの名前に置き換えます。 path-to-php/php script-name このコードは、PHP が緩やかに型付けされた言語であるため機能します。簡単に言うと、変数の型に関係なく文字列を整数に割り当て、小さな文字列を大きな文字列に簡単に置き換えることができます。 C のような言語ではこれは不可能です。 PHP は内部的に、変数が保持するデータを型とは別に保存します。タイプは別のテーブルに保存されます。異なる型を含む式が発生するたびに、PHP はプログラマが何をしたいのかを自動的に判断し、テーブル内の型を変更し、式を自動的に評価します。 よくあるトリビアをご紹介 タイプを気にしないのは良いことですが、場合によってはそれが大きな問題につながる可能性があります。どうしたの?実際の例を次に示します。Web 上で使用できるように、Windows ベースの PC で作成されたコンテンツを Linux システムに移動する必要があることがよくあります。 Windows ベースのファイル システムでは、ファイル名を処理するときに大文字と小文字が区別されません。ファイル名 DefParser.php と defparser.php は、Windows 上の同じファイルを指します。 Linux オペレーティング システムでは、これらは異なるファイルを指します。すべて大文字またはすべて小文字のファイル名を使用することを推奨する場合がありますが、大文字と小文字を同じに保つことがベスト プラクティスです。 この小さな問題を解決する 大文字と小文字を区別せずに、指定されたファイルがディレクトリに存在するかどうかを確認する関数が必要だとします。まず、タスクをいくつかの簡単なステップに分割します。コードを分解するのはばかげているように聞こえるかもしれませんが、コードを作成しているときにコードの部分に集中するのに非常に役立ちます。また、紙に書いた手順を書き直すことは、コードを書き直すよりも常に簡単です: ソース ディレクトリ内のすべてのファイル名を取得し、 . および .. ディレクトリを除外します。 そのディレクトリにターゲット ファイルが存在するかどうかを確認します。 ファイルが存在する場合は、大文字と小文字を区別してファイルを取得します。ファイル名が一致しない場合は、 false が返されます。ディレクトリの内容を読み取るには、readdir() 関数を使用する必要があります。この関数の詳細については、PHP マニュアルを参照してください (「参考文献」を参照)。ここでは、これだけ知っておいてください。readdir() は、呼び出しごとに、指定されたディレクトリ内のすべてのファイルの名前を 1 つずつ返します。すべてのファイル名がリストされると、false が返されます。 readdir() が false を返したときに終了するループを使用します。 しかし、これで十分でしょうか? PHP は緩やかに型付けされた言語であることに注意してください。つまり、整数値 0 は false と同じように扱われます (C でさえ、0 とブール値 false は同等のものとして扱われます)。問題は、コードが機能するかどうかではありません。ファイル名が 0 だったらどうなるかを想像してください。スクリプトが途中で終了します。次のスクリプト (リスト 2) を使用して、0 とブール値 false の同等性を判断できます: リスト 2. 0 とブール値 false の同等性を判断するスクリプト それで、何ができるでしょうか? PHP が型を内部に保存していることはご存知のとおり、それらの型にアクセスできれば問題は解決します。ブール値 false は、整数値 0 とは明らかに異なります。 PHP には gettype() 関数がありますが、ここではより単純なアプローチを選択しましょう。 === 演算子を使用できます (はい、等号が 3 つあります)。違いは、この演算子がデータの値と型の両方を比較することです。これについて混乱している場合は、PHP には !== 演算子もあります。これらの新しい演算子と gettype() 関数は、PHP 4 でのみ使用できます。リスト 3 は、この問題を解決する完全なコードを示しています。 リスト 3. 完全なコード 観察から得た教訓 リスト 3 の各関数が何を行うかについては説明しません。代わりに、PHP マニュアルを参照することをお勧めします (「参考文献」を参照)。 。馴染みのない関数を使用すると、想定されるパラメータと戻り値の型がエラーの原因になる可能性があります。 PHP の組み込み関数を説明するのではなく、すぐには分からないことについて説明します。 終了条件に異なる変数タイプが含まれる場合は、=== 演算子と !== 演算子を使用して強力な型チェックを実行することが重要です。 パーツで構成されたコード スクリプト全体を 1 つの関数として記述することもできましたが、代わりにコードを 2 つの関数に分割しました。前の記事の「分割統治」ルールを覚えていますか?それぞれの機能が異なる役割を果たしているからこそ、そうしているのです。他のスクリプトを使用してディレクトリの内容を取得する場合、便利な実装が得られます。ここで考慮していただきたいことがいくつかあります。スクリプト全体を関数として実装することを想像してください。また、コードのデバッグ、テスト、再利用に必要な労力を想像してください。 ループを正しく使用する 次に、foreach ループを見て、なぜ for ループを使用しないのか考えてみましょう。 for ループを使用するには、配列内の項目の数を知っている必要があり、追加の手順が必要です。さらに、PHP 配列を扱う場合、配列の境界を超える可能性があります。つまり、配列の要素が 10 個しかないときに、配列内の 15 番目の要素にアクセスしようとします。 PHP は小さな警告を出しますが、私の知る限り、スクリプトを繰り返し実行すると、サーバーのパフォーマンスが継続的に低下する一方で、CPU アクティビティ率が突然 100% に跳ね上がる場合があります。可能であれば、for ループの使用を避けることをお勧めします。 アサーティブ if 最後に、. ディレクトリと .. ディレクトリを無視する get_file_list() 関数のより大きな if 条件に注目してください。もちろん、従来の方法で変数を定数と照合することもできます。しかし、私がコーディングで失敗した例の 1 つでは、等号を見逃してしまい、何が問題だったのか後から理解できなくなることがよくありました。もちろん、PHP は比較ではなく代入を実行したいと考えるため、エラーをスローしません。定数を変数と比較し、等号が欠落している場合、PHP はエラー メッセージをスローします。 変更可能な変数名 さて、奇妙なことについて話しましょう。新しい開発者は、タスクを達成するための複雑な方法であると考えるため、変更可能な変数の使用を敬遠することがよくあります。実際、可変変数を理解して使用するのは簡単です。彼らは私を何度もトラブルから助けてくれましたし、言語の重要な要素です。実際、可変変数の使用が避けられない状況があります。このような実際の状況をすぐに見ていきますが、その前に、可変変数が実際にはどのようなものかを見てみましょう。まずリスト 4 のコードを試してみましょう: リスト 4. 可変変数を使用したコード まず、リスト 4 のコードは $myStr という名前の変数を宣言し、それに文字列 I を割り当てます。次のステートメントは別の変数を定義します。ただし、今回は、変数の名前は $myStr 内のデータです。 $$myStr は、PHP に別の変数を生成するように指示する方法です。これは、「変数 $myStr で見つかる名前の変数が必要である」ことを意味します。もちろん、これを行うには、$myStr を定義する必要があります。これで、I という変数ができ、それに文字列 am を使って値を割り当てました。次のステートメントでも同じことが行われます

www.bkjia.com本当http://www.bkjia.com/PHPjc/531717.html技術記事 「Developing Robust Code with PHP」は、中規模から大規模のアプリケーションにおける現実の問題の解決に関する一連の記事です。この記事では、PHP のベテランである Amol Hatwar が、変数を効果的に使用する方法について説明します。 ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート