大きな鏡をサーフボードとして使ったらどうなるでしょうか?より短い時間で波を征服できるかもしれませんが、これはサーフィンにとって正しい選択ではないことを心の底では確実に知っています。少し奇妙に聞こえるかもしれませんが、同じ原則が PHP プログラミングにも当てはまります。週末を少しかけて PHP を学ぼうとしている人の話をよく聞きますが、私の意見では、これはこのプログラミング言語を学ぶには非常に悪い方法です。 PHP を学習するプロセスが他の言語と異なるのはなぜですか?
その性質上、PHP 言語で「物事を行う」方法をマスターすれば、より快適に使用できるようになるため、これらの方法を理解するために投資する価値はあります。 PHP では、単に自分のアイデアに従って問題を解決するのは、多くの場合、間違ったアプローチです。これはあなたが悪いプログラマーだからではなく、保守しやすい優れたコードを書きたい場合に使用しなければならない標準的なテクニックがいくつかあるからです。知っておくべきトップ 10 のヒントを見てみましょう。
1. Web サイトのインデックス ページを正しく作成する方法
Web サイトを作成するとき、最初に行うことの 1 つは、Web サイトのインデックス ページを作成することです。 PHP を初めて使用する場合、インデックス ページを作成するときの一般的なアプローチは、インデックス ページに必要なコンテンツのみをプログラムし、他のリンク用に別のページを作成することです。ただし、PHP プログラミングを実装するより効率的な方法を学びたい場合は、多くの Web サイトで使用されている「index.php?page=home」モードを使用できます。
2. Request Global Array を使用してデータをキャプチャします
実際、値をキャプチャするために $_GET 配列と $_POST 配列を使用する理由はありません。グローバル配列 $_REQUEST を使用すると、get または form リクエストを取得できます。したがって、ほとんどの場合、データを解析するためのより効率的なコードは次のようになります:
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 0; var_dump を使用します。 PHP コードのデバッグ用
もしあなたが PHP デバッグ技術を探しているなら、var_dump があなたが探しているものであると言わざるを得ません。このコマンドは、php 情報の表示に関するすべてのニーズを満たすことができます。コードのデバッグのほとんどのケースは、PHP での値の取得に関連しています。
4. PHP はコードロジックを処理し、Smarty はプレゼンテーション層を処理します
Smarty は、PHP で書かれたテンプレート PHP テンプレート エンジンであり、現在業界で最も有名な PHP テンプレート エンジンの 1 つです。論理コードと外部コンテンツを分離し、元々 HTML コードと混在していた PHP コード ロジックを分離する、管理と使用が簡単な方法を提供します。簡単に言うと、その目的は、PHP プログラマーをフロントエンド担当者から分離し、プログラマーがフロントエンド担当者のページ設計に影響を与えることなくプログラムの論理コンテンツを変更し、フロントエンド担当者が影響を与えずにページを再変更できるようにすることです。プログラムのプログラム ロジック これは、複数人の共同作業を伴うプロジェクトでは特に重要です。
5. 本当にグローバル値を使用する必要がある場合は、構成ファイルを作成します
グローバル値を頻繁に作成するのは悪い習慣ですが、実際の状況ではこれが必要になる場合があります。データベース テーブルまたはデータベース接続情報にはグローバル値を使用することをお勧めしますが、PHP コードではグローバル値を頻繁に使用しないでください。あるいは、グローバル変数を config.php ファイルに保存する方が良い方法です。
6. 定義されていない場合はアクセス禁止です!
ページを正しく作成した場合、index.php または home.php 以外の人物がindex.php ページにアクセスする理由はありません。 Index.phpにアクセスしたら、変数を取得することで必要なページを開くことができます。インデックス ページには次のようなコードが含まれている必要があります:
<ol class="dp-c"><li class="alt"><span><span>define(</span><span class="string">'yourPage'</span><span>,1); </span></span></li></ol>次に、他のページには次のコードが含まれている必要があります:
<ol class="dp-c"><li class="alt"><span><span class="keyword">if</span><span> (!defined(</span><span class="string">'yourPage'</span><span>)) </span><span class="keyword">die</span><span>(</span><span class="string">'Access Denied'</span><span>); </span></span></li></ol>これの目的は、他の php ページへの直接アクセスを防ぐことです。このようにして、index.php を経由せずに他の Web ページにアクセスしようとすると、「アクセスが拒否されました」というメッセージが表示されます。
7. データベース クラスを作成する
データベース プログラミング (PHP では非常に一般的なタスク) を行っている場合は、データベース管理機能を処理するデータベース クラスを作成することをお勧めします。サンプルコードは以下の通りです。
<ol class="dp-c"> <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> dbExec(</span><span class="vars">$query</span><span>) </span></span></li> <li><span>{ </span></li> <li class="alt"> <span class="vars">$result</span><span> = </span><span class="vars">$this</span><span>->db-></span><span class="func">exec</span><span>(</span><span class="vars">$query</span><span>); </span> </li> <li> <span class="keyword">if</span><span> (PEAR::isError(</span><span class="vars">$result</span><span>)) errorRedirect(</span><span class="vars">$result</span><span>->getMessage(), true); </span> </li> <li class="alt"> <span class="keyword">else</span><span> </span><span class="keyword">return</span><span> </span><span class="vars">$result</span><span>; </span> </li> <li><span>} </span></li> </ol>この関数はクエリ文を受け取って実行するだけです。発生する可能性のあるエラーも処理します。ここに監査コードを含めることもできますが、私は次のような監査関数を使用することを好みます:
<ol class="dp-c"> <li class="alt"><span><span class="comment">// checks if arguments given are integer values not less than 0 - has multiple arguments function sanitizeInput() { $numargs = func_num_args(); </span><span> </span></span></li> <li> <span class="vars">$arg_list</span><span> = func_get_args(); </span> </li> <li class="alt"> <span class="keyword">for</span><span> (</span><span class="vars">$i</span><span> = 0; </span><span class="vars">$i</span><span> < </span><span class="vars">$numargs</span><span>; </span><span class="vars">$i</span><span>++) </span></li><li><span>{ </span></li><li class="alt"><span class="keyword">if</span><span> (!</span><span class="func">is_numeric</span><span>(</span><span class="vars">$arg_list</span><span>[</span><span class="vars">$i</span><span>]) || </span><span class="vars">$arg_list</span><span>[</span><span class="vars">$i</span><span>] < 0) errorRedirect(</span><span class="string">"Unexpected variable value"</span><span>, true); </span></li><li><span> } </span></li><li class="alt"><span>} </span></li><li><span> </span></li></ol>
8. 入力を処理する 1 つの php ファイルと、特定の関数を処理する 1 つの class.php ファイル
コードが乱雑になっている 重要な方法は、ユーザー入力を取得した後、それを他の関数にリダイレクトして処理することです。原理は非常に単純で、php ファイルは必要な入力をすべて受け取り、その実行をクラス ファイル内の関数にリダイレクトします。たとえば、「index.php?page=profile&action=display」のような URL があるとします。 URL は profile.php によって取得され、アクションは「表示」です。次に、単純なスイッチ関数を使用して、実際の表示関数を実行します。
<ol class="dp-c"><li class="alt"><span><span class="keyword">require_once</span><span> PROJECTROOT.</span><span class="string">'libs/messages.class.php'</span><span>; </span></span></li><li><span class="vars">$message</span><span> = </span><span class="keyword">new</span><span> Message(); </span></li><li class="alt"><span class="keyword">switch</span><span> (</span><span class="vars">$action</span><span>) { </span><span class="keyword">case</span><span> </span><span class="string">'display'</span><span>: </span><span class="vars">$message</span><span>->display(); </span> </li> <li> <span class="keyword">break</span><span>; </span> </li> <li class="alt"><span>... </span></li> </ol>上に示すように、メッセージ クラスを使用して、スイッチ チェックを開始します。 $message は、クラス内の関数を呼び出すことによって使用される単なるオブジェクトです。
9、了解你的SQL语句,并总是对其审查(Sanitize)
正如我以前所提到的,任何php网站中最重要的部分有99%的可能是数据库。因此,你需要非常熟悉如何正确的使用sql。学会关联表和更多高级技术。下面我将展示一个使用MySQL的函数示例,并使用本文第7条函数进行审查。
<ol class="dp-c"> <li class="alt"><span><span class="keyword">private</span><span> </span><span class="keyword">function</span><span> getSentMessages(</span><span class="vars">$id</span><span>) </span></span></li> <li> <span>{ </span><span class="vars">$this</span><span>->util->sanitizeInput(</span><span class="vars">$id</span><span>); </span> </li> <li class="alt"> <span class="vars">$pm_table</span><span> = </span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'privateMsg'</span><span>]; </span> </li> <li> <span class="vars">$users</span><span> = </span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'users'</span><span>]; </span> </li> <li class="alt"> <span class="vars">$sql</span><span> = </span><span class="string">"SELECT PM.*, USR.username as name_sender FROM $pm_table PM, </span> </li> <li class="alt"> <span class="string">$users USR WHERE id_sender = '$id' AND sender_purge = FALSE AND USR.id = PM.id_receiver AND is_read = TRUE ORDER BY date_sent DESC"</span><span>; </span> </li> <li> <span class="vars">$result</span><span> = </span><span class="vars">$this</span><span>->dbQueryAll(</span><span class="vars">$sql</span><span>); </span> </li> <li class="alt"> <span class="keyword">return</span><span> </span><span class="vars">$result</span><span>; </span> </li> <li><span>} </span></li> </ol>
首先,我们对用户输入进行检查(通过一个GET变量传递消息id),然后我们执行我们的SQL命令。注意这儿SQL的用法。你需要了解如何使用别名和关联表。
10、当你只需要一个对象时,使用单例模式
在PHP中相当常见的一种情形时,我们只需要创建一个对象一次,然后在我们的整个程序中使用它。一个很好的例子就是smarty变量,一旦被初始化后就可以在任何地方使用。这种情形的一个很好实现方案就是单例模式。示例代码如下:
<ol class="dp-c"> <li class="alt"><span><span class="keyword">function</span><span> smartyObject() </span></span></li> <li><span>{ </span></li> <li class="alt"> <span class="keyword">if</span><span> (</span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'SmartyObj'</span><span>] == 0) </span> </li> <li><span>{ </span></li> <li class="alt"> <span class="vars">$smarty</span><span> = </span><span class="keyword">new</span><span> SmartyGame(); </span> </li> <li> <span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'SmartyObj'</span><span>] = </span><span class="vars">$smarty</span><span>; </span> </li> <li class="alt"><span>} </span></li> <li> <span class="keyword">else</span><span> </span><span class="vars">$smarty</span><span> = </span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'SmartyObj'</span><span>]; </span> </li> <li class="alt"> <span class="keyword">return</span><span> </span><span class="vars">$smarty</span><span>; </span> </li> <li><span>} </span></li> <li class="alt"><span> </span></li> </ol>
注意,我们拥有一个全局smarty变量(该示例中它在config.php中被初始化),如果它的值为0,我们将创建一个新smarty对象。否则,它意味着该对象已经被创建,我们只需要返回它。