ホームページ php教程 PHP开发 PHP プログラミング手法を再考する (パート 1)

PHP プログラミング手法を再考する (パート 1)

Dec 21, 2016 am 10:50 AM

数年前、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} と の間に違いはないと主張するので、数文字を節約するには、いわゆるテンプレートで十分です。こんな大きなものを使うのはもったいないです。さて、ここでは私が使用した、そして今でも時々使用している簡単な PHP テンプレートの使用法を説明します:


文件demo.php:    
48    
49    view plaincopy to clipboardprint?    
50    <?php     
51    $userName=&#39;张三&#39;;      
52    include_once &#39;templates/demo.phtml&#39;;      
53    ?>    
54    <?php    
55    $userName=&#39;张三&#39;;    
56    include_once &#39;templates/demo.phtml&#39;;    
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) に注目してください。




















このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

See all articles