1

これは一部の観察、一部の質問です。
最初の観察:
誰もがモジュラープログラミング、OOP、手続き型、アスペクト指向、デザインパターンなどについて話しますが、いくつかの人気のあるオープンソースPHPアプリは、includesとによって制御される構造を持つプレーンスクリプトファイルですrequires

私が共有ウェブホストで最近の問題に直面するまで、これは私にはばかげているように見えました-彼らは共有ホスティングでMySQLストアドプロシージャをサポートしていません。私は多くの競合する共有ホスティングパッケージをチェックしました-同じ話。
次に、SQLクエリとDB処理クラスのいくつかの静的関数を使用してコードを書き直しました。その時、私は、前述のPHPプロジェクトが実際にWebホスティングパッケージの全範囲を考慮に入れていること
に気づき、より広いユーザーベースに到達するためにコードを可能な限り馬鹿にすることにしました。 もう1つは、正式なSoftware Enggのバックグラウンドがなくても、初心者がスクリプトを利用できることです。スクリプトは、初心者にとってはハッキングしやすいものです

これらの2つは、私が現象を説明するために見た正当な理由でした。
間違いなく、これらのプロジェクトを管理している人たちはソフトウェア開発がかなり得意なので、無能ではありません。
時々彼らは予備の現金も持っています。

さて、質問:他にどのような賢明な理由が考えられますか?


編集:他の人が指摘しているように、私は個人的にそれはOOPだけではないと感じています。良いコード構造は、OOP/手続き型のスタイルに依存していません。私はいくつかの関数ベースのPHPプロジェクトを自分で見てコーディングしました。

私が最も気になるのは、フォルダー/ファイルシステムのレイアウトが優れていること、ファイル/フォルダーの命名が優れていること、ドキュメントが豊富であること、標準に準拠していることです、ファイルを開いてコードを読み取ると、100個のif-thenがあります。 -その他の条件、バージョンチェック、あちこちでの出力バッファリングの奇妙な使用、Cookie操作コード、いくつかの定数、インクルード、および多くのファイルに明確な構造がありません。

少なくとも、コードを読もうとするたびに迷子になっているようです。しかし、JavaやC#コードベース、またはその他のサイドライン化されたPHPアプリからコードを読み取る場合、関数内でコードが適切に分離され、表示などにテンプレートが使用されます。整理されているように見えます。わかりやすいように見えます。
下位互換性はメンテナにとって問題になる可能性がありますがより構造化された方法で次のバージョンを作成する可能性があります。しかし、それも起こりません!
結局のところ、それらのメンテナは常に一生懸命働いているので、明らかに私は何かが欠けています。

4

4 に答える 4

3

PHPを使用してアプリケーションを構築する場合、プロバイダーの互換性は多くの分野で問題になります。特定のプロジェクトでOOPが使用されない理由ではありません。

public/private/protectedインターフェイスやキーワードなどのいくつかのオブジェクト指向プログラミングの特徴は、PHP5でのみ見つけることができます。一部のアプリケーションは引き続きPHP4をサポートしています。これは主に、アップグレードしないプロバイダーがまだ存在するためです(クライアントのPHP 4アプリが数十個クラッシュするという正当な恐れから)。したがって、「原始的な」PHP4OOPコードはまだたくさんあります。しかし、少なくとも基本的なOOPをサポートしない生きたPHPバージョンはありません。

includerequireコードスニペットを現在のスクリプトにインポートするために使用されます。それらはオブジェクト指向アプリケーションにもあります。

OOPをほとんど使用しないソフトウェア製品がいくつかありますが、全体的なコード品質が正常であれば問題ありません。多くの人(私自身も含む)は、より優れた、より再利用可能なソフトウェアを作成するための重要な方法と見なしていますが、OOPは優れたソフトウェアを作成するための要件ではありません。

于 2010-01-02T10:52:53.627 に答える
2

私は3つの主な理由を見ます:

  • 互換性:PHPには最初からOOPが含まれていませんでした。古いPHP環境とのダウン互換性を確保し、より多くのユーザーにリーチするために、現状を維持しています。
  • エフォートスイッチ:非OOPからOOPへのコードベースの切り替え/リファクタリングは多くの作業です(!!)。私の見解では、変換スクリプトは人間ではなくマシン用のコードを生成する傾向があるため、解決策ではありません。これは実行時の観点からは問題ありませんが、メンテナンスにはひどいものです。
  • チームカルチャー:私は何人かのPHP開発者と話をしましたが、何人かはすべてがうまく機能していると言っているので、切り替えをしたくないだけです...
于 2010-01-02T13:13:06.993 に答える
1

PHPですべてのOOPを実行する際の最大の障壁の1つは、ページがヒットするたびにすべてをリロード、初期化、実行する必要があることです。真にオブジェクト指向のPHPシステムを全面的に設計した場合、パフォーマンスはおそらくひどいものになります。物事を進めるためにロードおよび構成するファイルとオブジェクトがたくさんあるだけです。すべてをロードして、1秒以内に実行できるようにする必要があります(理想的にははるかに少ない)。それを比較して、システムを起動するのに10分かかるかどうかは実際には問題ではないJavaベースのシステムと言います。開始すると、すべてがロードされ、準備が整います。

WordPressは、多くのファイルを含むモジュラーシステムを作成するときに、物事がいかに遅くなるかを示す良い例です。はるかに少ないモジュラーOOPシステム。WordPressのストレートインストールの負荷テストでは、単純な「HelloWorld」ページで約10〜15ページ/秒が得られます。それを、まっすぐな「HelloWorld」phpスクリプトで100ページ/秒をはるかに超えることができることと比較してください。WordPress、Symfony、その他のシステムが行うキャッシュを使用して、これらの問題を回避できます。

于 2010-01-02T14:21:45.653 に答える
-2

PHPでMVCフレームワークを使用しない限り、このようなオブジェクト指向のアプローチ(ASP .NETのように)には時間がかかりすぎます。実際には、最初に独自のフレームワークを設計する必要があります。

PHPで真のオブジェクト指向アプローチを使用することは不可能だとは言えません。オブジェクトを好きな場所に持っていき、シリアル化してセッションなどでそれらをストローすることができます...

PHPのMVCフレームワークに関しては、真のオブジェクト指向アプローチを見ることができます。

ZendFrameworkの例についてはこちらを確認してください

ZendFrameworkだけではありません。

しかし、「オブジェクト指向」という言葉はPHPにとって新しいものです。PHP5のみが真のOOPを持っていると見なされます。したがって、真のオブジェクト指向アプローチを備えた優れたスクリプトができるまで、さらに1〜2年待つ必要があります。

于 2010-01-02T10:53:12.260 に答える