19

オブジェクト指向プログラミングが良いかどうかについては、多くの議論があります。ただし、Php で OOP を使用すると遅くなります。手続き型プログラミングとより高速な速度と低速の OOP を使用するのは良い取引でしょうか (ページが読み込まれるたびにクラスを開始する必要があり、大きな Web サイトは遅くなり始めるため)。

さらに重要なことに、クラス内に何かをラップして静的関数を使用するのが良いでしょうか、それともプレフィックス ex: wp_function() を持つ多くの偽の関数を使用する方が良いでしょうか。

4

9 に答える 9

12

OO を PHP で使用することを心配している理由が速度である場合でも、恐れる必要はありません。PHP は全体的に遅い言語です。オブジェクトを使用することによる速度の低下が問題になるほどプロセッサを集中的に使用することをしている場合は、PHP をまったく使用しないでください。

静的関数に関しては、これは設計上の選択ですが、完全に静的関数で構成されたクラスを避ける方が間違っています。接頭辞よりも利点はありません。構成体を使用するのは、良い考えではないからです。

于 2010-01-23T06:33:07.827 に答える
10

はい、ほとんどの場合、OOP を使用することをお勧めします。これは、OOP がコーディングのスタイルであり、ほとんどのコーディング スタイルが言語間で簡単に移行できるためです。

人々は特定の言語を使用するため、コーディング スタイルを使用しません。人々がコーディング スタイルを使用するのは、そのコーディング スタイルが望ましいと感じることを行うための優れた方法を提供するからです。したがって、基本的な要素 (継承、クラス プロパティなど) が存在する限り、そのコーディング スタイルで記述することは常に実行可能です。

いいえ、手続き型関数を使用してそれらにアクセスすることは、おそらく良い考えではありません。これは、状態を維持するためにおそらくこのようなことをしなければならないからです。

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

これは大量のグローバルな状態を作成するため、悪い考えです。

于 2010-01-23T06:30:31.910 に答える
6

パフォーマンスに関する同じ議論が、Objective C と C++ についても行われていました。そして、その問題に対する答えは、利用可能なメモリと処理能力を活用することでした。これらの処理能力は、絶えず大きく、より良く、より高速になっています。

はい、OO を実行するにはより多くのリソースが必要です。ただし、OO を使用する利点は、OO アプリケーションをサポートするためのハードウェア コスト $$ (取るに足らない可能性が高い) を上回ります。

ただし、ソフトウェアのパフォーマンスを気にするのは良いことです。ただし、開始点として手続き型と oo のボンネットの下を見るのは少し見当違いです。手続き型であろうとオブジェクト指向であろうと(両方とも関連があります)、最初は効率的なコードを書くことに集中する必要があります。

PHP は最速のプラットフォームではないかもしれませんが (たとえば、Java はその尻を蹴ります)、PHP はインターネット上で最もトラフィックの多い Web サイトの一部、つまり Facebook を強化するために使用されていることを覚えておいてください。

PHP と OO について他に疑問がある場合は、Zend と Magento (Zend ベース) を見てください。Magento は非常にリソース集約型のプラットフォームであり、メモリ使用量はインスタンスごとに 36MB を超える場合があります。ただし、プラットフォーム自体は何百万ものヒットを処理できます。これは、ハードウェア リソースを適切に提供する適切に構成されたサーバー環境により、OO を使用するすべての利点がサーバー自体のコストをはるかに上回るためです。しかし、クラスター化されたコンピューターの世界では、利用可能な処理能力とメモリを (責任を持って) 使用しないことは、--私見--臨床的な狂気です。

于 2012-05-21T20:57:59.543 に答える
6

Chacha102の答えには強く同意しません。

この質問に対する適切な回答は、数冊の本を埋めるでしょう - ここに 20 行の投稿を気にしないでください。

どちらのアプローチにも利点と欠点があります。自分自身を優れたプログラマーと見なしたい人には、手続き型、非手続き型、およびオブジェクト指向プログラミングの経験が豊富であることをお勧めします。SCRUM、カスケード、RAD などのさまざまな方法論の経験。

OO と手続き型コーディングに対する PHP の適合性に関しては、言語のルーツは確かに後者にあります (ただし、Java と ASP は両方とも真の OO 言語ではなくハイブリッドであることに注意してください)。

個人的には、非常に単純なものを作成する必要がある場合、またはその動作を完全に定義して予測可能にする必要がある場合に、手続き型コードを作成する傾向があります。ただし、実行時に動作が大きく変化する複雑なコードを記述する場合、設計が限られた一連のユースケースに基づいているにもかかわらず、OO は開発者の時間の点ではるかに効率的であることがわかります。

オブジェクト指向コードよりも高速に実行されるため、常に手続き型コードを作成する必要があると主張するには、次のようにします。

1) 必ずしも正しいとは限らない 2) 開発者の時間とハードウェアのコストの相対的なコストを完全に無視している

クラス内に何かをラップして静的関数を使用するのは良いことですか

名前空間が PHP で利用できるようになったことを考えると、これは名前空間の競合を回避するための非常に厄介な方法であり、私が推奨する方法ではありません。

C.

于 2010-01-23T10:49:56.073 に答える
5

私の謙虚な意見では、PHP 開発者は、 1 つの方向だけに進むべきではありません。(手続き型 vs オブジェクト指向) いくつかのグローバル関数だけが必要な場合もあれば、オブジェクトを使用する方が有益な場合もあります。すべてを一方的に強制しようとしないでください。柔軟に対応し、それぞれの状況に最適なものを使用してください。

于 2010-01-23T08:03:48.277 に答える
4

私はこれに興味がありました。残念ながら、コードを手続き型から oop に変更した後、事前にではなく、いくつかのベンチマークを実行しました。

これがベンチマークコードです。

class game{
  function maxp($val){
    return max(0,pow($val,0.5));        
  }
}

$game = new game;

for($i=0;$i<100000;$i++){
  $game->maxp(100);
  //game::maxp(100);
}

OOP の結果は 0.13 ~ 0.2 秒の範囲でした。

手続きの結果は、0.08 ~ 0.1 秒の範囲でした。

結果は、長期間にわたって一貫したままでした。

独自のテストを実行することをお勧めします。

PHP 5.4.3

于 2014-07-27T09:30:04.617 に答える
3

非常に多くの未知の変数に依存するため、完璧な答えは実際にはありません。

たとえば、アプリケーションを MVC モデルに分割する場合、モデルを OO にしますが、コントローラーはより単純な手順のままにします。

一般的な静的関数を単純にグループ化する手段としてクラスを使用することも、アクティブ レコード パターンにさらに深く組み込むこともできます。

メールで POST を送信する小さな単一ページの Web フォームを構築している場合、実際には OO は必要ありません。既存のメール クラスを利用する可能性があるためです。

あなたが取り組んでいるプロジェクトを理解せずに、誰もあなたに適切なアドバイスを与えることはできません.

とはいえ、唯一の懸念が速度である場合、OOわずかに遅くなります。また、手続き型 PHP でさえも、OO の利点の一部を模倣するために行うことができる卑劣なことがたくさんあります。ただし、大規模なプロジェクトを担当する場合を除き、追加のオーバーヘッドが大きくなることはありません。そして、大規模なプロジェクトになる頃には、OO の長所がそのオーバーヘッドの短所を上回る可能性があります。

于 2012-08-01T06:43:20.207 に答える
3

OOP には、デメリットよりもメリットがあります。PHP OOP、利点とは何かを参照してください。. OOP vs PP in PHPも参照してください。

于 2010-01-23T06:33:30.057 に答える
2

はい、アプリケーションが成長するにつれて.. (そして今後も) イライラする時間を何時間も節約できます。そして、自分自身を繰り返します(貼り付けコードをあちこちにコピーします).. :)

于 2010-01-23T06:36:10.187 に答える