PHP5.3 の正式リリースにより、この言語自体に改めて注目が集まりました。注意深い友人は、PHP5.3 に goto ステートメントが追加されていることに気づくかもしれませんが、これは今日の構造化言語では少し信じられないことのように思えます。
公式声明によると、これは実際には goto についての私たちの伝統的な理解とは異なります。 PHP 5.3 の goto ステートメントは、スクリプト ファイルとコンテキスト内でのみジャンプできるため、ある関数やメソッドから別の関数やメソッドにジャンプすることはできません。これは、「妥協」の結果ではないかと疑問に思うことがあります。
PHP 言語の設計者は、複数のループから抜け出すのを容易にするために goto ステートメントを使用したようです (ドキュメント内の例でもこの点が説明されています)。しかし実はこの機能自体が物議を醸しており、私もPandoraでその香水の匂いをぼんやり嗅いだことがある。
実際、その「良い人」は 2007 年の時点でこの「新機能」を「楽しみに」し始めており、今ではとても幸せになっていると私は信じています。しかし興味深いのは、この記事のコメントが原作者に冷や水を浴びせたことだ。実際、goto ステートメントで実現できる機能は、switch をうまく活用することで実現でき、より読みやすくなります。
しかし、何があっても、言語自体は単なるツールにすぎません。 (PHP だけでなく) プログラム自体の観点から見ると、ループなどのネストされたブロックが多すぎる場合は、そのコードを最適化する必要があることを意味します。実際、私や他の PHP 担当者も goto ステートメントを使用するかどうかについて議論しました。
最終的には、その使用を避けることが全員の一致した意見です。
「PHP の 10 の罪」
外国人は本当に耐えられないので、PHP 言語自体の文法の「10 の罪」をまとめた優れた人もいます。実際、私は個人的にこれを「間違い」ではなく、PHP が提供する「美しい罠」と呼んでいます。
たとえば、記事で言及されている一重引用符と二重引用符の変数エスケープの問題。実際、私が PHP を学んで以来、この議論の音が私の耳に入ってきました。当時、一重引用符と二重引用符のどちらをテストするのが速いかという古典的な面接の質問があったことさえ覚えています。今考えると、この議論はこの面接の質問とまったく同じで、意味がありません。
しかし、これは、記事内の一部の「間違い」をジョークとして扱うことができるという意味ではありません。注意が必要なものもあります。たとえば
以下为引用的内容: $i = 0; |
$i = 0;
while($i
//ここにいくつかのコード
$i++;
}
このように書いています。実際には、対応する for ステートメントが存在するため、ハンディキャップのために余分なセミコロンを記述している可能性があります (認めないでください)。したがって、set_time_limit の数が小さくなるように祈ることしかできません。
データベース アクセスにおけるキャッシュの問題など、この記事で指摘されている他の問題も考慮する必要があります。なぜ PHP にはこれまでデータ プールの概念がないのでしょうか? 実際、これは PHP 言語自体の設計思想から始める必要があります。この疑問は、実際には、なぜ PHP が Java に移行しなかったのかという議論に拡張することができます。
この記事には他にも同様のエントリがあり、それらはすべて非常に物議を醸しています (おそらくこれが著者の本来の意図です) が、いずれにせよ、この記事が提起するいくつかの疑問は検討する価値があります。
深夜に私の思いついた考えを聞いてみんな笑いました。意見を言うのは大歓迎です。