ちょうど昨日、私は
PHPによる非常に興味深い投稿を読みました
:悪いデザインのフラクタル (
Habréのロシア語版-
およそTransl。 )。 この論争の的で挑発的なトピックは、PHPコミュニティ全体で広く議論されています。 正直なところ、本当に良いポジションとコメントがあり、全体像を見ることができない率直な間違いがあります。
軽微なエラー
投稿には多くの間違いがあり、一般的に著者は目玉焼きと神の贈り物を混同しています。 主なものを強調します。
- デバッガーなし-PHPには、対話式デバッガーとして最適に機能するxdebugがあります。
- スレッドのサポートはありません-これは真実ですが、彼がこれをポジティブだと思ったとき、彼はこれを欠点として指摘しています。 アプリケーションのライフサイクルはリクエストで始まるため(この論文をもう少し詳しく説明します)
- ==役に立たない-はいいいえ、正しく使用すると非常に便利です。 はい、私はそれをますます使用しないことに同意しますが、あなたがそれを必要とするとき、それは役に立ちます...
- グローバル変数に関する可視性の問題-彼はそれについて何か奇妙なことを見つけます。 正直なところ、私にとってこれは、PHPが他のほとんどすべての言語よりも優れていることの1つです。 ブロック内にglobal $ varが表示されない場合、変数はローカルであることがわかります。 したがって、関数宣言を見るだけで、個々の変数を追跡することなく、外部環境がどうあるべきかをすぐに評価できます(そして、IDEにこれを依頼しないでください)。
- 定数は関数呼び出しを使用して決定されます-これはそうですが、著者は構文 `const FOO =" bar ";`を忘れており、これは有効で関数呼び出しではありません。
- インスタンスメソッド内の静的変数はグローバルです。これはまさにその目的のためです。 Pythonでは、 `obj .__ class __。Varname`を使用します...
- PHPはApacheに関連付けられています-これは率直なナンセンスです。Apacheが必要としないアプリケーションがたくさんあります。 ほとんどのプラットフォームのApacheは、デフォルトでmod_phpで設定されているだけです。 しかし、私にとっては、nginx + FastCGIのセットアップは、Apacheでmod_phpをセットアップするよりもはるかに簡単です。
- PHPアプリケーションとそのシステムの他の部分への依存を「分離」する簡単な方法はありません。suphpとFastCGIがあるため、これは真実ではありません。 異なるバージョンで実行されている複数の異なるPHPインスタンスを実行するのは本当に簡単です。 はい、実際、mod_phpではApacheインスタンスを分離する必要がありますが、サーバーを整理する方法はmod_php以外にもあるため、Apacheの制限をPHPに記述することは完全に公平ではありません。
- 機能セクション-これからは迷子になります。 それまで、彼は言語の機能について話しました(そしてほとんどの人が同意します)。 しかし、ここからライブラリとフレームワークについての会話が始まります。 はい、PHPにはテンプレートシステムはありません。 しかし、それは本当にPythonですか、それともRubyですか? DjangoとRuby On Railsがありますが、ZendとSymfonyはどうですか? PHPにはXSSフィルターはありませんが、PythonとRubyにはなく、フレームワークにのみあります。 PHPはルーティングをサポートしていませんが、PythonとRubyはサポートしていますか? しかし、 開発サーバーがあります 。 また、対話型デバッガー(xdebug)のサポート。 そして、セキュリティの問題と同じナンセンス。
一般に、大きな投稿全体から、本当に不満を引き起こす可能性のあるポイントはほとんどありません。 そこには多くのことが書かれていますが、そのような華やかなスタイルではあまり読みやすいものではありません。
私の顔
実際、書かれていることのほとんどに同意します。 PHPは一貫性がありません。 冗長。 不適切な動作の例は本当にあります。 彼には多くの問題があります。 時々彼はいです。 時々彼は日常生活で不器用です。 多くのことが望まれています。
しかし同時に、彼は非常に強力です。 実用的なアプリケーションを書くのは簡単で簡単です。 大規模なプロジェクトを作成するのは本当に簡単です。 簡単に拡張できます。 そして、本当に簡単なのは、ヘルプを取得することです(最大かつ最も活発なプログラミングコミュニティの1つがインターネットであなたをサポートします)。
ただし、人気のある言語に追加しないものが1つあります。それは、開発者以外が使用する可能性です。 オープンソースのWebプロジェクトを見てみると、PHPが勝利であることに気付くでしょう。 つまり、競合他社が大砲を発射することはできません(Wordpress、Joomla!、Drupal、vBulletin、MODx、TYPOなど)。 ネットワークサービス市場を見ると、PHPが支配的です(または強い影響力があります)。 事は、PHPサイトの展開はとてつもなく簡単だということです。 開発者でなくてもできるほど簡単です。
ブランドンサベージが言うように:
それは顧客についてです(そして顧客は誰ですか?)。 そして、これは元の記事で見逃した大きなケーキです。 実際、開発者の観点からすると、PHPには何かが欠けています。 しかし、開発者は何が成功したかをいつ判断するのでしょうか? 開発者がこれを決定した場合、Wordpress、jQuery、Jenkins / Hudsonなどのソフトウェアは、そのような成功を達成できませんでした(ソースコードには品質上の問題があるため)。 しかし、彼らは問題を解決し、それをうまく解決したために達成しました。
問題は、PHPには他の言語よりも多くの利点があることです。 これが私の頭に浮かんだものです。
- HTTPはファーストクラスのオブジェクトです。 これを提供する他の一般的な言語はありません。 PythonもRubyもCもJavaScriptもありません。 PHPには、低レベルのHTTPサポートが組み込まれています。 これはそれほど最適ではないが、これは一流だと主張することができます。 HTTPを話すためのライブラリやフレームワークは必要ありません。
- SAPIはファーストクラスのオブジェクトです(サーバーAPI、mod_php vs CGI vs FastCGIなど)。 これは、PHPが強力なサーバーの背後にあるように設計されたことを意味します。 これは、CLIからサーバーAPIへのコードの受け渡しが簡単であることも意味します(要求変数がどのように取得されるかを確認する必要があるだけです)。 サーバーと対話するためにライブラリまたはフレームワークを使用する必要はありません。 PythonのWSGIは原則としてパンを食べても無駄ではありませんが、サーバーと通信するにはライブラリを接続する必要があります。 これにより、PHPはWebアプリケーションの基盤を非常に簡単に構築できます。
- 要求から要求へのアプリケーションライフサイクル。 元の投稿では、これは否定的な側面として指摘されました。 PHP(すべてのPHPではなく、あなたのPHPアプリケーション)が新たにリクエストされるたびに、これは良いことです( インタビューでPHPの作成者である Rasmus Lerdorfからの引用)「PHPの非共有アーキテクチャは...言語そのもの。((文字通り:)何も手探りすることを許可しないPHPアーキテクチャ...言語自体の無限の水平スケーラビリティにつながります)。
- ただの巨大なユーザーベース。 はい、他の言語には多くのフォロワーがいますが、PHPに近づいている人はいません。 個人的には、これがすべての中で最も重要な側面だと思います。 これは、PHPを拡張する方法と、ほとんどすべての問題を解決する方法に関する知識に満ちた箱舟です。 あなたが何をしているのか知っていれば、必要なものはすべて見つかります。
これらの4つの理由は、PHPをメイン言語と考えるには十分です。 私はPythonとサーバーサイドJS(現時点ではnode.js)を知っており、積極的に使用しています。また、いくつかの言語にも精通しています。 しかし、私のメインプロジェクトではPHPに準拠しています。完璧ではありませんが、機能します。
あなたの考えはどうですか?