ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクト指向とPHPプロセス指向の長所と短所の比較_PHPチュートリアル
多くのプログラミング言語では、この 2 つのうちの 1 つだけをプログラミングに使用できますが、PHP 言語は他のプログラミング言語とは異なり、自由に選択または使用できます。 PHP に触れるときは、おそらく PHP のプロセス指向スタイルでコードを書くことが唯一の選択肢です。ただし、PHP フォーラムやニュースグループに頻繁にアクセスする場合は、「オブジェクト」に関する記事を目にするはずです。オブジェクト指向の PHP コードの記述方法に関するチュートリアルもご覧になったことがあるかもしれません。あるいは、既製のクラス ライブラリをダウンロードして、オブジェクトをインスタンス化し、その中でクラス メソッドを使用しようとしたことがあるかもしれません。ただし、これらのクラスがなぜ機能するのか、またはそれらのクラスを実装するために PHP オブジェクト指向メソッドを使用する必要があるのかはよく理解していないかもしれません。 。 「オブジェクト指向」スタイルを使用する必要がありますか?「プロセス指向」スタイルを使用する必要がありますか?どちらの陣営にも支持者がいる。 「このオブジェクトは効率が悪い」「このオブジェクトは素晴らしい」といったコメントも時々聞かれます。この記事では、2 つの方法のうちどちらが絶対的に有利であるかを簡単に判断するのではなく、それぞれの方法の長所と短所を確認することを目的としています。
以下は PHP プロセス指向スタイルのコード例です:
<ol class="dp-xml"><li class="alt"> <span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>print"Hello,world."; </SPAN><LI class=alt><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></span></font></strong></span><span> </span> </li></ol>以下は PHP オブジェクト指向スタイルのコード例です:
<ol class="dp-xml"> <li class="alt"> <span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>classhelloWorld{ </SPAN><LI class=alt><SPAN>functionmyPrint(){ </SPAN><LI class=""><SPAN>print"Hello,world."; </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN>} </SPAN><LI class=alt><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>myHelloWorld</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>newhelloWorld</FONT></SPAN><SPAN>(); </SPAN></SPAN><LI class=""><SPAN>$myHelloWorld-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></span></font></strong></span><span>myPrint(); </span> </li> <li class="alt"> <span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span> </li> </ol>
「オブジェクト指向」について何か知っていますか? 基本的な知識については、Google 検索を使用してください。インターネットには素晴らしい記事がたくさんあります。
このようなコードを書くのは誰ですか?
なぜこのトピックがフォーラムでの舌戦の引き金になったのかを理解するために、各陣営のより極端な例をいくつか見てみましょう。 「プロセス狂信」と「オブジェクト狂信」を見てみましょう。彼らのアイデアに聞き覚えがあるかどうかを確認してください。
Process FanaticProcess Fanatic は、このメソッドがより抽象的な実装を使用していないため、クラスのコンピューター教師によってかつて批判されました。そして、PHP のプロセス指向の視点「それは機能する!」をサポートしても、プログラミングのレベルやグレードは向上しません。卒業後は、速度とコードの改良に重点を置いたドライバー、ファイル システム、またはその他の低レベル プログラミングを作成する仕事に就くかもしれません。
「プロセス狂信」の極端な例は、オブジェクトや抽象化に対する抵抗です。彼らはプログラムをより速く実行する方法を常に考えており、他の人が自分のコードを読めるかどうかは気にしません。彼らはプログラミングをチーム活動ではなく競技として見なすことがよくあります。 PHP のほかに、彼らのお気に入りのプログラミング言語は C とアセンブリです。 PHP の世界では、PECL モジュールを開発し、効率的なコードを提供する場合があります。
Object FanaticObject Fanatic は、常に PHP オブジェクト指向スタイルを使用してコードを記述することに情熱を注いでいます。この方法を使用することがプログラムの実行効率に影響を与えるかどうかについては、あまり考慮されていません。時々、彼らは現実的なコードよりも抽象的なデザインコンセプトを楽しんでいるように感じます。彼らは通常、プロジェクト マネージャーまたはドキュメント ライターです。
オブジェクト愛好家は、抽象的な設計手法がなければ、依然として 0 と 1 を使用してプログラミングすることになると指摘しています。彼らは問題を説明するために疑似コードを使用することを好みます。極端な例は、効率が犠牲になることがあるとわかっていても、依然としてオブジェクトを使用するオブジェクト愛好家です。 PHP のほかに、彼らのお気に入りの言語は Java と Smalltalk です。 PHP の世界では、PEAR モジュールを開発し、十分に文書化された保守しやすいコードに貢献する可能性があります。
極端で皮肉なことはしないでくださいなぜフォーラムが常に偏見で満ちているか知っていますか?新しいことに対するあなたの経験や態度がその理由かもしれません。プログラマーとして、私たちはこれらの偏見を常に認識し、新しいことを学ぶことにオープンである必要があります。
あなたのコーディング傾向は何ですか?PHP コードを書くときにどのような好みや傾向があるかを考慮してください。多くの場合、これらの好みはかなり微妙です。場合によっては、すべてのプロジェクトで同じ設定を使用する場合があります。私は個人的には「エレガント」の方が好きですが、ここでは「エレガント」なコードを定義するつもりはありません。これについては別の記事で説明する必要があります。ただし、理論化された好みが実際のプロジェクトに必ずしも適切であるとは限りません。むしろ、偏見であることがよくあります。
理論的傾向•最小限のコード行数で完全な解決策を提供する•問題を問題レベルで考える
これは良いアイデアのように思えます。しかし、「コードの最小行数」をどのように測定するのでしょうか?コードのコメントを含めるべきでしょうか?各行を連結し、区別するためにセミコロンのみを使用する必要がありますか?中括弧はどうですか?明らかにこの考えは間違っています。
「問題レベル」とは何かをもう一度説明します。これは、ソリューション内のすべての概念にクラスが必要ということですか?それとも、問題の各部分を別個のファイルに保存し、現実の問題に対応する複雑なファイル ツリーを構築する必要がありますか?それがアイデアです - アイデアごとにファイルまたはクラスを用意します。
明らかに、これらの一般化は極端に解釈するとばかげたものになります。しかし、現実にはもっと微妙な証拠があります。プログラマーはチームで作業しているときに、複雑で強力だがコメントされていないコード行をどのくらいの頻度で挿入しますか?これは、これらのコードの保守を引き継ぐ人々にとって、間違いなく非常にイライラさせられることです。それどころか、官僚的で独善的な優秀なプログラマは、インターフェイスやクラスを確立するために「暴走」することがよくありますか? そして、それらのインターフェイスやクラスは、実装を担当するプログラマを制限するだけでなく、効率と柔軟性も制限します。顧客が延長を求めたときの混乱。これらは、上記のそれぞれの傾向の微妙な証拠です。
実践的な傾向
プロジェクトを開始するときは、まず実際のコーディングの目的と方向性を模索する必要があります。このプロジェクトの目標は何ですか?考えられる答えは次のとおりです。
•迅速な開発、迅速なリリース
•できるだけ早く実行
•保守、改善、拡張が簡単
•API を公開する
最初と 2 番目の方向は手続き型スタイルを使用する傾向があり、最後の 2 つの方向は優先されますPHP のオブジェクト指向スタイル。
特定の方法がより効果的になるのはどのような場合ですか?
それでは、各アプローチの実際の利点を評価してみましょう。
PHP 手続き型の場合
PHP の手続き型プログラミングの利点に関する基本的な議論は、PHP がインタープリター型言語であるということです。つまり、他の言語とは異なり、実行可能パッケージにコンパイルされず、インタープリターされて実行されます。すぐに。これはスクリプト言語であり、テキスト ファイルに保存されます (Zend コンパイル ツールを使用する場合を除く)。
PHP4 以前のバージョンでオブジェクト指向コーディングを使用することに反対するもう 1 つの理由は、PHP の以前のバージョンではオブジェクトの機能が適切に設計されていなかったことです。ラスムスはかつてこう言った。「それは思いつきだった。」これは、PHP4 以前ではオブジェクトの効率が問題であったことを意味します。しかし、PHP5 が登場すると、この状況は変わります。
次の 2 つの最も人気のある PHP プログラム、OsCommerce と PhpMyAdmin は主にプロセス指向のコーディングを使用します。構築も実行も高速です。どちらも当然ながら HTML を埋め込むアプローチを採用しています。
OsCommerce
OsCommerceは実際には多くのオブジェクトを使用しますが、ほとんどの機能は「プロセス」を通じて実装されます。私はかつて OsCommerce をハッキングして、顧客にとって非常に役立つカスタム機能を追加したことがあります。 OsCommerce の多くの処理コードはテンプレート化されたシステムを使用せず、多言語バージョンで設計されているため、開始するまでにある程度の時間がかかるため、このプロセスは非常に面倒です。しかし、それは機能しており、実際、すでに多くの電子商取引サイトで非常にうまく機能しています。 OsCommerce は、モジュールとプラグインを開発するためのフォーラムと開発フレームワークも提供します。したがって、現在では他の開発者によって多くの便利な機能モジュールが提供されています。
PhpMyAdmin
PhpMyAdmin は、MimerSQLValidator クラスという 1 つのクラスのみを直接使用します。これは、PEAR パッケージの Mail_Mime、Net_DIME、および SOAP に依存します。これは、目的を達成できる既成のコードを使用するという開発の都合によるものと考えられます。さらに、すべてが手続き型であり、HTML と PHP コードが混在しています。
PhpMyAdmin は、少数のデータテーブルに対してそれほど複雑ではない処理を実行するために私がほぼ毎日使用しているツールです。場合によっては、クライアントにバックエンド管理ツールとして使用するよう勧めることもあります (もちろん、クライアントの権限は制限しています)。 PhpMyAdmin は非常に優れたパフォーマンスを発揮し、非常に高速です。場合によっては、一部のプロジェクトで PhpMyAdmin をバックエンド管理ツールとして拡張し、データ クエリ ステートメントのブックマークなどの新機能を使用して顧客や編集者に簡単に表示したいことがあります。新しいバージョンが登場するたびに、PhpMyAdmin はますます便利で強力になります。 Software Development Network
PHP プロセス指向の概要
プロセス指向スタイルを使用する上記 2 つのプログラムには、非常に優れたドキュメントとコード コメントが含まれています。 OsCommerce が提供する開発フレームワークにより、保守性と拡張性が向上します。ただし、どちらも API を提供しておらず、プログラムを他のシステムに拡張することはできません。
OsCommerce を請求プログラムに統合したい場合は、PhpMyAdmin を顧客が使用できるバックエンド管理ツールに拡張するなど、多くの時間と労力がかかります。ただし、設計の目的から判断すると、それぞれの分野で非常に優れたパフォーマンスを発揮します。
PHP オブジェクト指向のケース
オブジェクト指向スタイルを支持する人々の見解は、拡張性とカプセル化に焦点を当てています。オブジェクト指向でコードを書くだけではコードは文書化されませんが、コードを文書化することは奨励されます。また、拡張を容易にするために、API を作成することもできます。 PHP5 は、オブジェクト指向プログラミングをさらに楽しくすることを約束します。私はこれを冗談めかして PHP の「Java 2」バージョンと呼んでいます。これは、インターフェイス、オブジェクト指向モデル、try-catch ステートメントなど、Java の多くの機能が統合されているためです。しかし、オブジェクト指向のサポートが不十分な PHP4 であっても、依然として優れたオブジェクト指向アプリケーションが数多くあります。
Smarty
Smarty は、複雑なフォームを持つテンプレートベースのサイトを構築するために使用されます。最近、私は完全に「スキン化」できるオンライン試験システムを作成しました。これは、基礎となるコードや機能を変更することなく、サイト全体の外観、インターフェイス、スタイルを完全に変更できます。デザイナーが新しいインターフェイスを簡単に設計できるようにするために、Smarty タグ ライブラリの拡張としてカスタム タグ ライブラリを設計しました。次のように簡単に挿入できます:
[navigationhorizontal Separatedby"|"]
ページの上部にナビゲーションを分離します。 Smarty は、変数に含まれるデータを表す非常に強力なメカニズムをすでに提供しているため、これは、より複雑な Smarty タグをスキン タグにマッピングする単純なプロセスです。
Smarty はクラスとしてカプセル化されており、そのメソッドが十分に文書化されているため、テンプレートを使用するプロセスは驚くほど簡単に拡張できます。同時に、Smarty は、使用する変数のみを Smarty テンプレート メソッドに明示的に渡すことを強制することで、PHP 環境変数の保護層も提供します。このアプローチは、Smarty テンプレートのデザイナーとプログラマーの間に安全で信頼できる作業関係を確立するのに役立ちます。
FPDF
FPDFは非常に優れたツールです。 pdflib の API の変更に混乱している場合、商用ソリューションにお金を払う気がない場合、または共有ホスティングの制限により拡張モジュールを使用できない場合は、この無料の純粋な PHP で構築された PDF 生成ツールの使用を検討してください。
このクラスは文書化されており、PDF 内でテキストと画像をレイアウトする方法の多くの良い例が含まれています。上記と同じオンライン学習サイトで、FPDF を使用して、TrueType フォントと 300 dpi の精度の画像を使用して PDF ファイルを動的に生成しています。 PDF 自体のダウンロードには数分かかる場合があるため、PHP で FPDF クラスをインスタンス化し、PDF を操作するのに余分な時間はかかりません。実際、PDF を動的に生成して配信するのは、低速なネットワーク接続を介して静的な PDF ファイルを配信するのと同じくらい時間はかかりません。これはすべて相対的なものです。また、FPDF はクラスベースであるため、拡張することができます。実際、いくつかのクラス メソッドは存在しますが、まだ完全には実装されておらず、サブクラスで独自のコンテンツ (カスタム ヘッダー要素やフッター要素など) を構築する際のガイドとなるフレームワークとしてのみ機能します。
PHP オブジェクト指向の概要
Smarty と FPDF はどちらも、メイン クラスを拡張するための十分に文書化された API を提供します。これは、クラス内でメソッドとデータを編成する必要性を示しています。関数やグローバル変数を使用して同じ機能を実現できる場合もありますが、これを拡張するのは簡単ではありません。さらに、オブジェクトの使用は、PDF または HTML ドキュメントのスタイルを追跡および維持するのに非常に役立ちます。同じデータを異なる形式で発行できます。 Smarty と FPDF はどちらも、オブジェクトを使用して柔軟で実用的なクラス ライブラリを構築する優れた例です。
なぜ両方の方法が必要なのでしょうか?
情熱的なプログラマーの話に戻り、私たちは彼らを称賛することから始めます。
• Smarty と FPDF の実用性と拡張性に感謝します
• osCommerce と phpMyAdmin の速度と優れたパフォーマンスに感謝します
この感謝には、PHP の基本的な開発も含まれます。 PECL と PEAR はどちらも多くの賞賛と批判を受けています。これら 2 つのプロジェクトは、PHP における手続き型プログラミングとオブジェクト指向プログラミングの違いを明確にする良い例になると思います。
PECl は、速度とシンプルさに重点を置き、C およびプロセス指向の方法で開発された PHP 用の拡張ライブラリを提供します。通常、これらは既存の LGPL ソフトウェアからの移植であり、多くの興味深い機能が PHP に追加されています。結局のところ、PHP は C で書かれています。
PEAR は、Excel テーブルの作成や DNS レコードの変更など、多くの興味深いクラスを提供してきました。 PEAR クラス ライブラリを使用すると、時間を大幅に節約でき、PHP に詳しくなくても、「よくわからないけど使える!」という開発が可能になります。
概要
この記事が、PHP オブジェクト指向と PHP プロセス指向という 2 つのプログラミング方法についての理解を深め、さらに重要なことに、より具体的な詳細を調べることを奨励することができれば幸いです。ご自身のアイデアを持ち、実際の開発でプロジェクトの開発傾向をテストし、より実践的な事例をまとめ、この記事に遠慮なくコメントを書いていただければ幸いです。
つまり、それぞれの方法にはそれぞれ利点があります。議論に巻き込まれるよりは、そのままにして実際のコードを書いた方が良いのです。