ここ数週間は私にとって非常に複雑な経験でした。私たちの会社では大規模な人員削減があり、私もその一人でしたが、その喜びを味わいました。私は解雇されたことがないので、考えすぎないようにするのは難しいです。求人サイトを閲覧し始めたところ、フルタイムの PHP プログラマーの求人に魅力を感じたので、履歴書を送って面接を受けました。面接の合間に、私は相談電話でその主要プログラマーとチャットし、最終的に彼らは一連のテスト質問をくれましたが、そのうちの 1 つは非常に興味深いものでした。
次のコードのどこが間違っているのか調べてください:
$x = new Array();
$x[売上] = 60;
$x[利益] = 20:
foreach($x as $key = $value) {
echo $key+" "+$value+"
「;
」}
}
いくつ見つけられますか?
関数のパラメータリストにカンマが抜けている場合、「new Array()」が間違っている場合、行末にセミコロンの代わりにコロンが使用されている場合、foreach で「=>」が使用されていない場合「+」は文字列を接続するために使用されます。これで、おめでとうございます。すべてのエラーが見つかり、PHP プログラミングの基本をマスターできました。
それでは、私がこの質問にどう答えたかをお話しましょう。確かに上記の問題を特定しましたが、さらに一歩進めました。たとえば、配列インデックス内の文字列が引用符で囲まれていないことに気付いたことがありますか? これは重大なエラーではありませんが、コーディング エラーです。また、エコー行では一重引用符の代わりに二重引用符が使用されており、「
」が使用されていないことに気づきましたか? 「」の代わりに「
」を使用します。」?
実際のエラーを発見した後、上記で見つかった問題の後にコメントを追加しました。これは、解答用紙を「正しい」から「考えさせられる」に変えるのに十分であり、それによって私の応募書類にも多くのポイントが追加されたため、彼らは私を採用することに決めました。 (でも、最終的には断ったのは、私はタイトな生活ペースが好きで、通信市場に関わる会社ではなく、自分の PHP スキルを顧客に捧げるためです。自分のスキルを披露するステージが必要です。)
それでは、私が書いた PHP プログラミングの 10 の習慣を見てみましょう:
1.一重引用符で囲まれた文字列を使用します
文字列を囲むために二重引用符が使用されている場合、PHP インタープリターは変数置換、エスケープ、および " " などのその他の操作を実行します。基本的な文字列を出力したいだけの場合は、一重引用符を使用すると、リソースが節約されます。もちろん、変数置換を実行する必要がある場合は二重引用符を使用する必要がありますが、それ以外の場合は一重引用符を使用します。
2.文字列出力
次のステートメントのうち、最も速く実行されるのはどれだと思いますか?
print "こんにちは、私の名前は$aです。私は$bです。";
echo 「こんにちは、私の名前は $a です。私は $b です。」;
echo 「こんにちは、私の名前は「.$a.」です。私は「.$b;
」ですエコー「こんにちは、私の名前は「,$a,」です。私は「,$b」です;
エコー「こんにちは、私の名前は「,$a,」です。私は「,$b」です。
これは奇妙に思われるかもしれませんが、実際には最後のものが最も速く実行されます。 print は echo より遅く、文字列内の変数を置換するときは遅く、文字列の連結はカンマで連結するよりも遅くなります。 最後の文は、最初の習慣を具体化したものです。したがって、文字列内で変数置換を行わないことにより、プログラムの実行が速くなるだけでなく、構文の強調表示 (変数が強調表示される) により、どのエディターでもコードが読みやすくなります。エコーパラメータはカンマで連結でき、文字列連結よりも高速であることを知っている人はほとんどいません。最後に、最初の習慣を使用すると、このステートメントは非常に優れたものになります。
3. 配列インデックスには一重引用符を使用します
上記のテスト問題でわかるように、$x[sales] は技術的に間違っており、インデックスは括弧で囲む必要がある、つまり $x['sales'] とすべきであると指摘しました。これは、PHP が引用符で囲まれていないインデックスを「裸の」文字列として認識し、定数として解釈するためです。定数の定義が見つからない場合は、文字列として解釈されるため、このステートメントは実行可能です。インデックスを囲むことでこの部分の作業を節約でき、今後この文字列を使用して定数を定義する場合でもエラーは発生しません。私自身はテストしていませんが、これを実行すると約 7 倍高速になると聞いたことがあります。このトピックの詳細については、PHP マニュアルの「配列」の章の「配列でできることとできないこと」のセクションを参照してください。
4. 開始記号の略語は使用しないでください
こんな記号使ってますか?
5.正規表現は使わないようにしましょう
正規の文字列操作を実行する場合は、正規表現(pregおよびeregシリーズの関数)をできるだけ使用しないようにしてください。 str_replace 関数は preg_replace よりもはるかに高速であり、strtr 関数でさえ str_replace よりも高速です。手間を省けば、上司はあなたに感謝するでしょう。
6. ループ宣言内で関数を使用しないでください
この問題は PHP だけで発生するものではなく、他の言語のコードでもよく見られます:
違い: for($i=0;$i
良い例: $count=count($array);for($i=0;$i
これを説明するのは簡単ですが、多くの人はコードを 1 行減らしてシステム リソースを無駄にしたいだけです。 count 関数がループ宣言で使用されている場合、ループごとに 1 回呼び出されます。ループが多い場合は、多くの時間を無駄にします。
7. register_globals とマジッククオートは絶対に使用しないでください
これら 2 つは非常に古い機能で、当時 (10 年前) では良い方法だったのかもしれませんが、現在はそうではないようです。古いバージョンの PHP では、インストール時にこれら 2 つの機能がデフォルトで有効になるため、セキュリティ ホール、プログラミング エラー、その他の問題が発生する可能性があります。たとえば、変数はユーザーがデータを入力したときにのみ作成されます。どちらの機能も現在は非推奨となっているため、すべてのプログラマは使用を避ける必要があります。過去のプログラムでこれら 2 つの機能が使用されていた場合は、できるだけ早く削除してください。
8. 変数は必ず初期化してください(ここでの「初期化」は「宣言」を指します - 訳者注)
初期化されていない変数が必要な場合、PHP インタープリターは自動的に変数を作成しますが、プログラミングでこの機能に依存するのは得策ではありません。変数がどこで作成されたかを把握する必要があるため、プログラムが粗雑になったり、混乱したりする可能性があります。さらに、初期化されていない変数のインクリメントは、初期化された変数よりも遅くなります。したがって、変数を初期化することをお勧めします。
9. コードをコメントします
この質問は何度も出ていますが、何度やっても足りません。コードにコメントを付けないプログラマーを雇わないところもあると思います。前回の面接の後、副社長と面接官と一緒に私が書いたコードを確認したところ、彼らも私のこの習慣について学びました。一日後、仕事が決まりました。
PHP マスターを自称する人の中には、自分のコードはよく書かれており、コメントを追加する必要はないと主張している人もいると思います。私の意見では、これらの人々はゴミです。コメントを書くための仕様とテクニックを学び、phpDocumentor や Doxygen などのコメント支援ソフトウェアに慣れることは価値があります。
10. プログラミング仕様に従う
この点に関して、面接中に上司候補に尋ねる必要があるのは、上司がどのようなプログラミング規約を使用しているかということです。 PEAR?Zend?内部標準? あなたが独自に作成したものでも、現在人気のあるものでも、使用しているプログラミング標準について言及してください。 PHP のような緩い言語の場合、適切なプログラミング仕様がなければ、コードはゴミの山のように見えます。臭くて気持ち悪いゴミ。基本仕様には、スペース仕様、括弧の一致、命名スタイルなどが含まれます。これは、高品質のコードを追求する人にとって必須です。
誰かが「あなたの 4 つのスペースのインデントが嫌いです。」と言いますが、インデントに 4 つのスペースを使用すると、タブを使用するよりも 3 文字多くのスペースが必要になります。さらに重要なのは、メモ帳よりも高度なエディタを使用している限り、タブのインデント値をカスタマイズできることです。そのため、すべてのプログラマーが最も使いやすい方法でコードを確認できます。可能な場合は 4 に設定し、マゾヒストの場合は 0 に設定します。とにかく構いませんが、インデントにスペースを使用することはできません
一般的に、上記のプログラミングの習慣があなたのお役に立てば幸いです。面接中に良い印象を与えたいなら、ほんの少しの細部を整えるだけで十分です。