数年前、PHP5 はプロセス指向言語からオブジェクト指向言語に変更され、さまざまな技術フォーラムで大きな波紋を巻き起こしましたが、多くの人が PHP は自らを滅ぼすだろうと主張しましたが、問題が収まるとすぐに、ほとんどの人が切り替えました。 PHP はサポートされない状態からサポートされるようになり、4.0 時代には冗談で子供のおもちゃと呼ばれていた状態から、Java と C に次ぐ 3 番目に大きな言語に成長しました。議論全体に参加していたので、私はオブジェクト指向を完全に理解したつもりになり、2008 年以降はオブジェクト指向プログラミングを完全に採用し始め、zend フレームワークのみでプログラムを作成するようになりました。
しかし、ここ数か月の私の仕事の経験によって私は反省し、今年最も有名な質問を再考し始めました。 JAVA が 2 つありますか?」 はい、PHP を使用する理由の 1 つは、必ずしもオブジェクト指向である必要がないことです。すべてのプログラミング技術とコンセプトは単なる手段であり、短期間で顧客のニーズを満たすことが私たちの目標です。この目標を持たずに技術について話すことは間違いなく間違っています。その典型的な例が PHPER のメンバーです。 PHPBB は尊重しますが、DISUCZ のコードの技術的な内容は軽蔑します。しかし、実際にフォーラムを構築するとなると、PHPBB を使用するのは誰でしょうか。中国のフォーラムのほとんどは DISCUZ が所有しています。ここ 2 年ほど、私はオブジェクト指向にこだわり、多くの時間を無駄にしてきました。これは私が犯した重大な間違いです。
そこで、今後プロジェクトを選択するときに、単にテクノロジーに従うのではなく、より適切なアーキテクチャを選択できるように、PHP プログラミングについての理解を再整理することにしました。みなさんもぜひレンガづくりをしてみてください。
1. 関数の役割
今でも、コンピューターを専攻していない友人は、通常、コンピューター言語を学んでいると思われますが、運が良ければ C 言語を学ぶこともできます。ステートメントと Loop ステートメントは必須であり、関数をしっかり学習していないと、おそらく不注意で合格してしまいます。たとえ関数のようなものがこの世に存在しないとしても、プログラムはすべての関数を完了することができます (残念なことに、私は過去数か月の間にそのようなプロジェクトを見たばかりです)。
それでは、何のために関数が必要なのでしょうか?数え切れないほどの教科書には、それが再利用のためであると書かれています。そう、一度関数を書いてしまえば、次回から同じ関数を使う場合には、再度関数を書かずにそのまま呼び出すことができるというのが関数発明の本来の目的であり、基本的な機能です。しかし、関数の使用頻度が低いと予想される場合は、その関数を使用しないほうがよいでしょうか?いいえ、プロセス指向プログラミングを採用したとしても、できる限り関数を使用し、関数を可能な限り細分化し、関数ごとに独立した関数を記述する必要があります。関数型プログラミングを使用すると、次の明らかな利点があります:
ロジックが明確。どんなに複雑な関数であっても、それが複数の単一関数に細分化されていれば、それぞれの単一関数のロジックは、あまり気にすることなく、そのロジックに従って簡単にコードを埋めることができます。
テストが簡単。実際、関数を使用してプログラムを作成すると、プログラムに自然な中断が発生し、どのコードにエラーがあるのかがすぐにわかります。すべてのプログラマーは、コードのテストに費やす時間は、通常、コードの作成に費やす時間の 2 倍、さらには 3 倍であることを知っておく必要があります。
読みやすい。プログラムを書いてしばらく経つと、顧客が使用中に問題を発見したり、関数を変更する必要が生じたりすることがあります。プログラマは、自分が書いたコードさえ明確に思い出せなかったり、関数を中心に書かれたプログラムを読んだときに、メイン プログラムは基本的にアウトラインであり、メイン プログラムのコンテキストに沿って対応する関数をすぐに見つけることができます。
再利用が簡単。通常、関数は完了時にテストされている必要があります。その時点でより注意深くテストされていれば、将来は関数の説明に従っていつでも関数を呼び出すことができます。細部に注意を払います。
素早い修正。場合によっては、機能の変更を避けることができない場合があります。複数のプログラムで同じ機能を呼び出す場合、この関数を変更する限り、すべてが同時に変更されるため、1 つずつ変更する必要はなくなります。
上記の利点のため、プロセス指向プログラミングに関数を使用することは、どのフォーラムでもそれを疑問視している人を見たことがありません。
2. コードコメント
多くの人の習慣とは異なり、私は多くのコメントが好きです。このように、私や私の同僚がプロのエディターを使用するとき、それらは phpdocument 標準に準拠したコメントです。 Zend Studio または NetBeans としてコードをブラウザーで開くと、最初の文字を入力すると、私が作成した関数とメソッドが自動的にポップアップ表示され、関数の機能、使用法、パラメーター要件、およびコメントした戻り値の形式が表示されます。中国語で。すべてのプログラマは、できるだけ多くのコード コメントを書きたいと考えていますが、多くの人は自分でコメントを書くことはめったにありません。フォーラムや QQ グループでコメントをいくつか学びましたが、これはおそらくメモを書くことの怠惰が原因であることがわかりました。失業や基本的な自信の欠如により、自分の地位の安定を確保するために他人が引き継ぐのは困難になることが予想されます。
3. 関数をクラスに置き換えます
最後に、オブジェクト指向プログラミングの基本的な方法について話しましょう。クラスでは、変数を属性と呼び、外国人は新しい概念を思いつくたびに、常に新しい名前を付けたがります。 、プロパティやメソッドについて言及するとき、私たちは変数や関数について語る人よりも常に知識があるように見えました。もちろん、本質的には全く同じものです。
なぜクラスを使用するのでしょうか? 私の個人的な理解によれば、最初は、これは主に変数のスコープによるものです。グローバル変数のセキュリティについては、C 言語の入門チュートリアルでも述べられていますが、脆弱性やハッカーの危険にさらされるだけでなく、独自のコードを作成する場合、同じ名前のせいでさまざまな期待がかかることもよくあります。グローバル変数は問題ありません。それぞれの変数をパラメータで渡すと面倒になります。 Netbeans のような優れたプログラミング ツールのおかげで、実際にはこれらの変数を手で入力する必要はなく、不快な気持ちで変数を眺めるだけで済みます。明らかに、これはほとんどの関数、または少なくとも関数のグループで使用される変数ですが、値を繰り返し渡さなければならないのは常に不快に感じます。そこでクラスが存在し、PHP5.0以降ではクラス内で属性(変数)やメソッド(関数)のスコープを細かく定義できるようになりました。
同時に、クラスを使用するもう 1 つの基本的な利点は、関数をグループ化できることです。関数が十分にある場合は、関数をクラスごとに分離することが困難になります。他の関数によってのみ呼び出され、ユーザーが直接呼び出す必要がないメソッドは、同僚が誤って呼び出すことを防ぐために単純にプライベートにすることができます。このようにして、パブリック関数ライブラリは完全に複数のクラスに分解されます。
多くの場合、クラスの基本関数は普遍的な価値を持っており、間違いを気にせずにクラスをコピーできます。これは、クラスが独自の属性値やスコープを持たないためです。グループではこれはできません。
ここで明確にする必要がある問題の 1 つは、多くの人が関数ライブラリを複数の関数に分割するとプログラムの実行が高速化されると誤解していることです。各ページは、使用する関数ライブラリまたはクラスのみを呼び出すと考えています。サイズが小さくなり、当然速度も速くなります。実際、実際の状況はその逆で、コンピューターを使用する場合、初めて WORD ファイルを開くときは速度が遅くなる可能性がありますが、その後すぐに 2 回目に開くと速度が大幅に速くなるということは誰もが知っています。これは、WORD ファイルと WORD ソフトウェア自体がメモリにキャッシュされているためです。同様に、関数ライブラリがどれほど大きくても、ページは最初に呼び出されたときにキャッシュされるため、再度開くと当然より高速になります。もともと関数ライブラリが含まれているページの場合、分解後は複数のファイルをインクルードする必要があり、ロードよりもファイルのシークに時間がかかるため、キャッシュせずにページを開いた場合でも、関数ライブラリを分解すると時間が短縮されます。プログラムの実行速度に加えて、クラスのインスタンス化にもある程度の時間がかかります。もちろん、今日のコンピューター ハードウェアでは、こうした速度の低下はまったく無視できるものであるため、ハードウェアの開発もオブジェクト指向プログラミングの普及の基盤の 1 つです。
したがって、プロセス指向のプログラムでは、引き続きクラスを使用します。 もちろん、プロセス指向のプログラムでは、クラスは次の 3 つの状況でのみ必要になります。
プロジェクトが十分に大きく、関数ライブラリが必要になる場合。人々を失神させます。
自分が書いた特定の関数が普遍的であることがわかったとき。
単純なクラスを使用した後でも、Web サイトがオブジェクト指向であると主張することはできません。この記事のタイトルの後に「(パート 1)」と追加しました。つまり、この記事の残りの部分では、当然のことながら、プロセス指向のプロセスで使用できるテクノロジについてのみ説明します。オブジェクト指向にも適しています。オブジェクト指向についての私の理解を次の投稿で表明します。
4. テンプレート
有名な Smarty は、使ったことがない人でも聞いたことがあるはずです。私が初めてこの存在を知ったのは xoops でした。当時は簡単な掲示板しかやっていなかったので、SMARTY を学ぶのには大変な労力がかかりました。当時私が見つけた最高の SMARTY オンライン チュートリアルは、Big Brother の Smarty チュートリアルだったことを覚えています。しばらくして、ジョイ インターナショナル ビレッジの兄弟たちが協力して、SMARTY ドキュメント全体を翻訳することにしました。スマートさん、私は {$x} と c863f84193f84abe9bd10ecc8ce5f014 の間に違いはないと主張するので、数文字を節約するには、いわゆるテンプレートで十分です。こんな大きなものを使うのはもったいないです。さて、ここでは私が使用した、そして今でも時々使用している簡単な PHP テンプレートの使用法を説明します:
文件demo.php: 48 49 view plaincopy to clipboardprint? 50 <?php 51 $userName='张三'; 52 include_once 'templates/demo.phtml'; 53 ?> 54 <?php 55 $userName='张三'; 56 include_once 'templates/demo.phtml'; 57 ?> 58 文件demo.phtml: 59 60 view plaincopy to clipboardprint? 61 <html> 62 ...... 63 <body> 64 你好,<?php echo $userName;?> 65 </body> 66 </html> 67 <html> 68 ...... 69 <body> 70 你好,<?php echo $userName;?> 71 </body> 72 </html>
ほら、テクノロジーは使用されていない、単なるテンプレートではないでしょうか?しばらくの間、フォーラムで Smarty についての議論が行われるたびに、私は常に私のアイデアを宣伝したいと考えていましたが、残念ながら、一昨年、Cakephp というテンプレート テクノロジーが中国に導入されるまでは反応がありませんでした。その後すぐに、zend は PHP を自然なテンプレートとして使用する独自のフレームワークを立ち上げ、smarty は PHP のコア サブプロジェクトとして開発されなくなりました。 http://smarty.php.net を参照してください。リマインダー:
76
77 Smarty は PHP プロジェクトのサブプロジェクトではなくなり、その後独自のドメインに移動しました: www.smarty.net
78
79 したがって、ページとプログラムを分離することは絶対に必要ですが、オープンソースプログラムやセルフサービスのWebサイト構築を行う場合を除き、smartyに代表されるテンプレート技術は必要ありません。それ以外の場合は、テンプレートを使用する必要はありません。
80
81 5. 静的ページの生成 VS キャッシュ + 疑似静的
82
83 私が初めて PHP で Web サイトを構築し始めたとき、私が最初に使用した CMS システムは 9466 記事と呼ばれるもので、静的 HTML 生成テクノロジを使用していました。当時のバージョンにはまだ機能上の欠陥がたくさんあったのに、私はそれを修正して学習するのに多大な労力を費やし、その修正内容をネットに公開したのには驚きました。実際、ダウンロードを提供する Web サイトはたくさんあります。2006 年に会社の Web サイトを作成しました。URL は http://www.nbssdz.com で、今回は CMS を最初から作成し、それを使用しました。静的ページ技術。しかし、現在はこのテクノロジーを使用していません。joomla、phpwind、discuz、zend フレームワークなどのオープン ソース プログラムによって、疑似静的という別のテクノロジーが実証されました。
84
85 静的ページを生成する利点は 2 つあります。1 つは、Web サイトのアクセス速度を向上させ、サーバーの負荷を軽減することです。もう 1 つは、検索エンジンがこのサイトのより多くのページを含めることができるようにすることです。静的ページの欠点は、もちろん「静的」であることです。ナンセンスのように聞こえますが、異なるユーザー権限に応じて異なるコンテンツを表示するなど、多くの動的機能は静的ページには実装できません。したがって、現在、擬似静的が普及しつつあります。擬似静的の機能は、その名前が示すように、検索エンジンに取り込まれるように動的ページの静的 URL を偽造することです。もちろん、デフォルトでは URL ディレクトリ形式が深すぎるため、含めるには適していません。私の他の Web サイト http://czj.kiloweb.cn が最適化された後、時間をかけて変更します。ディレクトリ形式は、カスタマイズが非常に柔軟であることがわかります。もちろん、擬似静的ページは静的ページよりもサーバー負荷が高いだけでなく、通常の動的ページよりも負荷が高いため、Web サイトの応答速度を向上させるためには、キャッシュを柔軟に使用する必要があります。 -static は応答速度の点でまだ利点がありません。
86
87 したがって、機能要件がほとんどない従来のコンテンツ公開カテゴリや、サーバーが過負荷になっている Web サイトでは、静的ページを生成するテクノロジーを引き続き使用できますが、権限やクリック数などがあり、長時間のページ生成が必要な Web サイトの場合は、静的ページを生成するテクノロジーを引き続き使用できます。定期メンテナンス 機能を追加する Web サイト、または独立したサーバーを持つ Web サイトでは、疑似静的テクノロジーを使用する必要があります。結局のところ、一部の機能は静的ページでは実現できません。たとえ一部の機能を実現する「方法を見つける」ことができたとしても (ajax や iframe など)、「方法を見つける」ための時間コストが高すぎます。
88
89 6. Ajax
90
91 Ajax は興味深い技術ですが、Ajax の不便な点は、Web サイト上のコードの量が大幅に増加したことです。最近のプロジェクトでは、ページが gb2312 を使用しており、使用した jquery フレームワークのload() 関数が utf8 のみをサポートしていたため、iframe を使用する必要がありました。その後、これは少し魔法だと言えます。 iframe を長年使用し、jquery を 2 年近く使用した後、iframe は実際には悪くないことがわかり、記述できるコードが大幅に減りました。ここ 1 年ほど、私は jquery を使用して上司をイライラさせる多くのことを行ってきました。技術的により眩しいという理由だけで、顧客が要求したことのないいくつかの特殊効果を作成しました。これにより、多くの時間が無駄になり、 jquery を理解していない人 アーティストと上司は自分で jquery を変更する方法がありません。つまり、私が言いたいのは、ajax は非常に優れたものであり、jquery は一流の ajax フレームワークであるということです。しかし、良いものを悪用すべきではなく、実際の状況から始めて、必要な場合にのみ使用する必要があります。先ほど言ったことを問うというよりは、時間というのはそういうもので、ニーズがあれば使わなければいけないし、ニーズを生み出す必要がなければ使わなければいけない。
92
93 7. XML と JSON
94
95 フォーラムに頻繁に参加する利点は、人気のあるテクノロジーの開発動向を常に把握できることです。たとえば、一昨年のある日、多くの人が突然、xml の代わりに json を使用することを提案し始めました。私はこの提案を両手で支持します。 jsonを利用することでアクセス速度が向上するだけでなく、開発効率も大幅に向上します。 json_encode()
96 、 json_decode() 、これら 2 つの単純な関数を使用すると、PHP 配列と json を直接変換でき、simplexml や dom よりもはるかに便利です。したがって、ほとんどの場合、Google のサイトマップも RSS も作成せず、jquery に値を渡すだけです。xml を使用する必要はありません。
上記は、PHP プログラミング手法の再考 (パート 1) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。