PHPを守るために

最近、stackoverflowに関するトピックが作成されました。このトピックでは、PHPが重要ではない言語であると著者が主張し、説得を求めました。 議論として、彼は別の参加者によって順次コメントされたいくつかの議論を引用した。 これの無料翻訳を以下に示します。

個人的に、私はレスポンダーに完全に同意し、すべてのPHP嫌いな人は次のことを理解する必要があると思います。



PHPには、システム関数とライブラリ関数の一貫性のない命名があります。 予測可能な命名スキームは、どの言語でも重要です。


これは私が同時に好きなものと嫌いなものです。 しかし、本質的に、この声明は真実です。 一部の2ワード関数がアンダースコアで区切られているのとそうでないのはなぜですか? $針と$干し草の山が時々場所を入れ替えるのはなぜですか? これはばかげています。 しかし、最終的には本当に重要なのでしょうか? 私のauto-IDEとphp.netは常に手元にあります。 したがって、これは言語としてのPHPのマイナス要因かもしれません。 しかし、それは私が効果的なプログラマーであることを妨げるものではありません。



PHP開発者は、常に組み込み関数と低レベルの機能を放棄しています。 良い例は、参照によって関数にパラメーターを渡すことを拒否することです。 これは、たとえばコールバックを使用するすべての人にとって悪夢になりました。


個人的には、これはあまり良い点ではないと思います。 このような変更は、言語の進化、特にPHPのような大規模で使用される言語の進化に必要です。 PHPは、貧しいプログラマーになる機会を多く提供しますが、同じように、PHP開発者にとって、参照による値の受け渡しなどの愚かな言語構成を排除することは問題です。 この機会をなくすことは、彼らがこれまでに行った最良の決定の1つになりました。 初心者にとって、この「機能」を使用するよりも簡単に足を撃つ方法はありません。



再設計のロジックの欠如。 前述の「略語」により、関数のデフォルト値を指定できない場合がありました。 このバグはPHP 5で修正されましたが、PHP 4からの参照による変数の転送も削除されました。


論理に欠陥があるとは思わない。 この特定の変化があなたに強く影響し、「口の中に不快な後味があった」と思います。 言語の変更は、多くの場合、実装の数か月前または数年前に知られるようになります。 4から5に移行するには、すべての違いを説明する移行ガイドがあります。 参照によるパラメーターの受け渡しはひどい特性であり、他の方法では達成できない利点を開発者に与えませんでした。



名前空間の実装が不十分です(実際にはまったくありません)。 そして今、彼らが現れたとき、何がセパレータとして使用されるのでしょうか? バックラッシュ! PHPでもエスケープによく使用されるキャラクター!


私はこれについて複雑な気持ちを持っています。 私の一部は、「エスケープキャラクターは行の外では意味をなさないので、違いは何ですか」と思います。 しかし、彼らはできますか? 知りません、私はZend開発者ではありません。 ただし、5.3より前には名前空間がないという事実は、ひどい省略です。



型変換を過度に使用すると、エラーが発生します。 たとえば、floatからintへ、またはその逆への変換に問題はありません。 しかし、PHP(最後にチェックしたとき)は喜んで配列を整数に変換しようとします。


PHPがこれを行う方法に異議を唱えるのは普通だと思いますが、これが言語を「悪い」ものにすることに同意しません。



再帰パフォーマンスが悪い。 再帰は、どの言語にとっても基本的に重要なツールであり、複雑なアルゴリズムをはるかに簡単にすることができます。 これに対する不十分なサポートは単に許されません。


PHPはWeb用のDSLです。 私は彼と8年間緊密に協力し、通常はディレクトリまたはXMLをバイパスするために、4回または5回の強さで再帰を使用しました。 これは、Web開発に必要なアプローチではありません。 生産性の低下を容認しませんが、これは生産性よりもはるかに学術的な問題です。 高速な再帰が本当に必要な場合は、PHPを選択することはできません。



関数は大文字と小文字を区別しません。 彼らがそれをした瞬間に彼らが何を考えていたのか私にはわかりません。 プログラミング言語は、あいまいさなしに、コンピューターとプログラマーの両方の動作を定義する方法です。 大文字と小文字を区別しないと、多くのあいまいさが生じます。


私はそれに完全に同意します。



PHPは、ロジックとプレゼンテーションの混合を推奨しています(実際に必要です)。 はい。そうしないようにコードを書くことができますが、間違った(設計の観点から)コードを簡単に書くことができます。


どのように素晴らしい-人々はあらゆる出力システムを使用できる言語に文句を言います(PHPのテンプレートエンジンの数とスタイルは雄弁にこれを証言します)-または-すべてをスキップして直接出力します。 これはPHPをまったく悪くしません。 これは、PHPが優れている理由の一部です。



PHPのパフォーマンスはキャッシュなしではひどいものです。 教えてください、PHP用の商用キャッシング製品を販売している人はいますか? そうそう、PHP開発者自身がそれを行います。


バイトコードキャッシュ(アクセラレータなど)、または出力キャッシュを意味しますか?



最初の場合、それは私にとって重要ではないと思います。 アクセラレータは無料で、非常に簡単に固定できます。 なぜそれらが言語の一部ではないのかについて議論することはできますが、最終的には、これはそれほど重要ではないと思います。



出力キャッシュについて話している場合は、何も話すことはありません。 かなりのワークロードがあるWebプロジェクトにはキャッシュが必要です。 PHPはそれとは何の関係もありません。



一般的に、PHPはアカデミックな意味で「悪い」言語だと思います。 そして、PHPコードを使用して「物事を成し遂げる」人々。



All Articles