大きな鏡をサーフボードとして使用するとどうなりますか? もしかしたら、より短い時間で波を征服できるかもしれませんが、これがサーフィンにとって正しい選択ではないことは間違いなく心の底ではわかっています。少し奇妙に聞こえるかもしれませんが、同じことが 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 リクエストを取得できます。したがって、ほとんどの場合、データを解析するためのより効率的なコードは次のとおりです:
<ol class="dp-c"><li class="alt"><span><span>01.</span><span class="vars">$action</span><span> = isset(</span><span class="vars">$_REQUEST</span><span>[</span><span class="string">'action'</span><span>]) ? </span><span class="vars">$_REQUEST</span><span>[</span><span class="string">'action'</span><span>] : 0; </span></span></li></ol>
3. PHP コードのデバッグには var_dump を使用します
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にアクセスしたら、変数を取得することで必要なページを開くことができます。インデックス ページには次のようなコードが含まれている必要があります:
<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>)) </span> </li> <li class="alt"> <span>errorRedirect(</span><span class="vars">$result</span><span>->getMessage(), true); </span> </li> <li> <span class="keyword">else</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>
この関数はクエリ文を受け取って実行するだけです。発生する可能性のあるエラーも処理します。ここに監査コードを含めることもできますが、私は同様の監査関数を使用することを好みます:
<ol class="dp-c"> <li class="alt"><span><span>01.</span><span class="comment">// checks if arguments given are integer values not less than 0 - has multiple arguments </span><span> </span></span></li> <li> <span class="keyword">function</span><span> sanitizeInput() </span> </li> <li class="alt"><span>{ </span></li> <li> <span class="vars">$numargs</span><span> = func_num_args(); </span> </li> <li class="alt"> <span class="vars">$arg_list</span><span> = func_get_args(); </span> </li> <li> <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 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) </span></li><li><span>errorRedirect(</span><span class="string">"Unexpected variable value"</span><span>, true); </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></li><li><span>{ </span></li><li class="alt"><span class="keyword">case</span><span> </span><span class="string">'display'</span><span>: </span></li><li><span class="vars">$message</span><span>->display(); </span> </li> <li class="alt"> <span class="keyword">break</span><span>; </span> </li> <li><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></li> <li class="alt"> <span class="vars">$this</span><span>->util->sanitizeInput(</span><span class="vars">$id</span><span>); </span> </li> <li> <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 class="alt"> <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> <span class="vars">$sql</span><span> = "SELECT PM.*, USR.username </span><span class="keyword">as</span><span> name_sender FROM </span><span class="vars">$pm_table</span><span> PM, </span><span class="vars">$users</span><span> USR </span> </li> <li class="alt"> <span>WHERE id_sender = </span><span class="string">'$id'</span><span> AND sender_purge = FALSE AND USR.id = PM.id_receiver AND is_read = TRUE </span> </li> <li><span>ORDER BY date_sent DESC"; </span></li> <li class="alt"> <span class="vars">$result</span><span> = </span><span class="vars">$this</span><span>->dbQueryAll(</span><span class="vars">$sql</span><span>); </span> </li> <li> <span class="keyword">return</span><span> </span><span class="vars">$result</span><span>; </span> </li> <li class="alt"><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> </li> <li class="alt"> <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> <span class="keyword">return</span><span> </span><span class="vars">$smarty</span><span>; </span> </li> <li class="alt"><span>} </span></li> </ol>
注意,我们拥有一个全局smarty变量(该示例中它在config.php中被初始化),如果它的值为0,我们将创建一个新smarty对象。否则,它意味着该对象已经被创建,我们只需要返回它。
希望本文的介绍,能够给你带来帮助。