ホームページ >バックエンド開発 >PHPチュートリアル >大規模システムにとって PHP はなぜ煩わしいのか_PHP チュートリアル

大規模システムにとって PHP はなぜ煩わしいのか_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:19:00910ブラウズ

私は過去 4 年間、PHP アプリケーション開発に取り組んできました。 PHPは本当に書きやすいです。しかし、PHP には非常に重大な欠陥もいくつかあります。

以下に、小規模なアマチュア Web サイトよりも大きな Web サイトに PHP が適さない私の理由を述べます。

1. 再帰のサポートが不十分
再帰は、関数がそれ自体を呼び出すメカニズムです。これは、複雑なものを非常に単純なものに変えることができる強力な機能です。再帰の使用例はクイックソートです)。残念ながら、PHP は再帰があまり得意ではありません。 PHP 開発者の Zeev 氏は、「PHP 4.0Zend は、ヒープ アプローチではなく、高密度データに対してスタック アプローチを使用しています。これは、許容できる再帰関数の数の制限が他の言語よりも大幅に小さいことを意味します。バグを参照してください。」と述べています。 1901年。これは非常に悪い言い訳です。すべてのプログラミング言語は適切な再帰サポートを提供する必要があります。

2. 多くの PHP モジュールはスレッドセーフではありません
数年前、Apache は Web サーバーのバージョン 2.0 をリリースしました。このバージョンでは、ソフトウェアの 1 つの部分で複数の部分を同時に実行できるマルチスレッド モードがサポートされています。 PHP の発明者は、PHP のコアはスレッドセーフだが、非コア モジュールはスレッドセーフではない可能性があると述べています。しかし、十中八九、このモジュールを PHP スクリプトで使用したいと考えますが、これにより、スクリプトが Apache のマルチスレッド モードと互換性がなくなります。これが、PHP チームが Apache 2 のマルチスレッド モードで PHP を実行することを推奨しない理由です。 Apache 2 が不人気なままである理由の 1 つとして、PHP のマルチスレッド モードのサポートが不十分であることがよく挙げられます。

3. PHP は商用アプリケーションによって機能不全に陥ります
キャッシュを使用すると、PHP のパフォーマンスが 500% 向上します [ベンチマーク テストを参照]。では、なぜキャッシュが PHP に組み込まれていないのでしょうか? PHP のメーカーである Zend は独自の Zend Accelerator を販売しているため、当然ながら商用製品を捨てたくはありません。

しかし、別の代替手段があります。APC はその後、無料のアクセラレータである Zend Optimizer を立ち上げました (Translator)

4. 名前空間はありません 誰かがファイルを読み取るための PHP モジュールを作成したと想像してください。モジュール内の 1 つの関数は read と呼ばれます。次に、別の人のモジュールが Web ページを読み取ることができます。この Web ページには、read 関数も含まれています。 PHP はどちらの関数を使用するかを認識できないため、これら 2 つのモジュールを同時に使用することはできません。

しかし、非常に簡単な解決策があります。それは名前空間です。かつて誰かがこの機能を PHP5 に追加することを提案しましたが、残念ながら彼はそうしませんでした。名前空間を使用しない場合、名前の競合を避けるために、各関数の先頭にモジュール名を付ける必要があります。その結果、xsl_xsltprocessor_transform_to_xml などの非常に長い関数名が生成され、コードの作成と理解が困難になります。

5. 非標準の日付形式文字 多くのプログラマーは、UNIX および C 言語に由来する日付形式文字に精通しています。他のいくつかのプログラミング言語はこの標準を採用していますが、奇妙なことに、PHP には完全に互換性のない独自の日付形式文字のセットがあります。 C では、「%j」は年間の日を表し、PHP では月の日を表します。ただし、事態をさらに混乱させるのは、Smarty (人気のある PHP テンプレート エンジン) の strftime 関数と date_format 関数では C/UNIX 書式文字が使用されていることです。

6. 紛らわしいライセンス

PHP は無料であり、マニュアルに記載されているすべての PHP モジュールも無料であると思われるかもしれません。間違っている!たとえば、PHP で PDF ファイルを生成する場合、マニュアルには PDF と ClibPDF という 2 つのモジュールが記載されています。ただし、これらは両方とも商用ライセンスを取得しています。したがって、使用するすべてのモジュールについて、そのライセンスに同意する必要があります。

7. 一貫性のない関数命名規則

一部の関数名は複数の単語で構成されています。単語の組み合わせには一般に 3 つの習慣があります:
直接スプライシング: getnumberoffiles

アンダースコアで区切る: get_number_of_files

Camel のルール: getNumberOfFiles
ほとんどの言語でこれらのいずれかを選択します。ただし、PHPは使用されます。

たとえば、いくつかの特殊文字を HTML エンティティに変換する場合は、関数 htmlentities を使用して単語を直接連結します)。逆の機能を使用したい場合は、弟の html_entity_decode を使用する必要があります。何らかの特別な理由により、この関数名には単語がアンダースコアで区切られています。これはどうやってできるの? strpadという機能があるのはご存知でしょうか。それとも彼はstr_padですか?毎回、シンボルが何であるかを確認するか、エラーを待つ必要があります。関数では大文字と小文字が区別されないため、PHP では rawurldecode と RawUrlDecode に違いはありません。これも良くありません。両方が使用されており、見た目が異なっており、読者を混乱させます。

8. 魔法​​の引用地獄

魔法の引用) は、SQL インジェクション攻撃から PHP スクリプトを保護できます。これはいい。ただし、何らかの理由で、php.ini でこの構成をオフにすることができます。したがって、柔軟なスクリプトを作成したい場合は、マジック参照がオンかオフかを常に確認する必要があります。このような「機能」はプログラミングを容易にするはずですが、実際にはプログラミングをより複雑にします。

9. 標準フレームワークの欠如
全体的なフレームワークのない成長中の Web サイトは、最終的にメンテナンスの悪夢に変わります。フレームワークを使用すると、多くのタスクが簡単になります。現在最も人気のあるフレームワーク モデルは MVC モデルで、プレゼンテーション層、ビジネス ロジック、データベース アクセスが分離されています。

多くの PHP Web サイトは MVC モデルを使用しません。彼らにはフレームすらありません。現在でも PHP フレームワークはいくつかあり、自分で作成することもできます。PHP に関する記事やマニュアルはフレームワークをまったく改善しません。 JSP 開発者は Struts などのフレームワークを使用し、ASP 開発者は .Net を使用しますが、これらの概念は PHP 開発者に広く理解されているようです。これは、PHP が実際にどれほどプロフェッショナルであるかを示しています。

概要: 何が問題ですか?

非常に小規模なプロジェクトの場合、非常に満足のいくプログラミング言語となる可能性があります。しかし、より大規模で複雑なプロジェクトの場合、PHP は弱点を示します。探索を続けると、私が述べた問題のいくつかに対する解決策が見つかるでしょう。では、解決策がわかったら、それを修正してみませんか?また、これらの修正がマニュアルに記載されていないのはなぜですか?

オープンソース言語が非常に人気があるのは良いことです。残念ながら、それは素晴らしい言語ではありません。いつかすべての問題が PHP6 で解決されることを願っています。 ) であれば、オープンソースでありながら使いやすいオープンソース言語が手に入ります。

5 つを超えるスクリプト ページを含むプロジェクトを開始したい場合は、C#/ASP.Net または Java/JSP を検討した方がよいでしょう。あるいは Python もより良い選択であるかもしれません。

この記事を書いた後、他の同様の記事について何人かの人が私に教えてくれました:
大規模な Web サイトで PHP を使用した経験
「PHP と Perl の対照」
私は PHP が嫌い
PHP の煩わしさ


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/589777.html技術記事私は過去 4 年間、PHP アプリケーション開発に取り組んできました。 PHPは本当に書きやすいです。しかし、PHP には非常に重大な欠陥もいくつかあります。 以下にPH...
の理由を述べます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。