ホームページ  >  記事  >  バックエンド開発  >  PHP プログラマーが従うべき PHP プログラミング ガイドライン_PHP チュートリアル

PHP プログラマーが従うべき PHP プログラミング ガイドライン_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:12:43871ブラウズ

PHP プログラマーが従うべき PHP プログラミング ガイドライン

優れた PHP 開発者になるにはどうすればよいでしょうか? これは、PHP 初心者なら必ず抱く疑問です。実際、PHP プログラミングのマスターになるのは簡単ではありません。真の PHP マスターになるには、他にも多くの問題を考慮する必要があります。では、どうすればより早く優れた PHP 開発者になれるのでしょうか? Green Tea エディターをフォローしてください

次の 3 つのガイドラインは、成熟した PHP プログラマーがプログラミングにおいて最初に従うべきガイドラインです。

◆怠惰は金なり

◆美しいコードを書く

◆プログラミングの速さではなく、プログラムの速さを追求する

怠惰は金だ

プログラマーにとって、怠け者になるには 2 つの方法があります:

まず、他の人の既成のプログラムコードを大胆に使用し、それらのコードを自分のプログラムやプロジェクトに統合してください。 2 つ目は、関数ライブラリを構築するための便利なコードを作成することです。これにより、将来プログラムを作成するときに簡単に使用できるようになり、繰り返しの作業が大幅に軽減され、自然と面倒な作業が軽減されます。これらの遅延メソッドは両方とも、PHP プログラマーに非常に適しています。

まず、PHPは自由でオープンな環境で生まれ育った言語です。世界中には、PHP の完成度を目指して絶えず努力しているプログラマーが何千人もいます。また、彼らは自分の創意工夫や自分が書いたコードを他の人と共有することにも意欲を持っています。 PHP の Web サイト、メーリング リスト、ニュース グループからは、毎日多くの優れたプログラム コードを見つけることができます。

次に、いくつかの一般的な関数を紹介します。これらの関数の一部はインターネット上のオープン ソース プロジェクトからのものであり、一部はメーリング リストから選択されたものです。それらを自分のライブラリに追加できれば、遅かれ早かれその恩恵を受けることになるでしょう。

1. 一般的なデータベース処理機能

他の CGI 関数と比較した場合、PHP の利点の 1 つは、強力なデータベース処理機能です。しかし、PHP では、さまざまなデータベースを処理するためにいくつかの特殊な関数が使用されており、一般的なデータベース処理関数が不足しています。これにより、プログラム コードの移植性が大幅に低下し、プログラミング初心者の友人にも多大な不便をもたらします。

インターネットでは、多くのプログラマーがクラスをカプセル化することでこの問題を解決しました。彼らは、Linux の世界で人気のある Mysql であっても、Windows プラットフォームで広く普及している SqlServer であっても、あらゆる一般的なデータベースを処理するための統合関数を作成しました。

優秀な PHP 開発者の中には、データベース接続やデータベース ハンドルなどの複雑なことを考慮する必要がなく、ましてや「query」や「next_record」などのいくつかの単純な関数を直接使用できるため、これらの関数を非常に好んで使用する人もいます。使用しているデータベース。これらの機能が必要な場合は、次の URL にアクセスして入手できます:

◆http://phplib.netuse.de/

◆http://phpclasses.UpperDesign.com/browse.html/package/20

◆http://phpdb.linuxbox.com/

2.変数デバッグ機能

PHP プログラムのデバッグは常に頭の痛い問題であり、VB などの高級言語のような統合されたコンパイルとデバッグ環境がなく、Linux や DOS 環境で直接実行できる Perl のようにもありません。実際、echo ステートメントを柔軟に使用することで、PHP のデバッグを完了できます。次の関数を使用すると、プログラム内の変数の型と値をいつでも確認できます。

function ss_array_as_string (&$array, $column = 0) { $str = "Array(n"; while(list($var, $val) = each($array)){ for ($i = 0; $i < $column+1; $str .= " " ; $str .= ss_as_string($val, $column+1); "; } for ($i = 0; $i < $column; $i++){ $str .= " "; } return $str.); } function ss_object_as_string (&$object, $column = 0 ) { if (emptyempty ($object->classname)) { return "$object"; } else { $str = $object->classname."( n"; while (list(,$var) = each( $object->persistent_slots)) { for ($i = 0; $i <$column; $i++){ $str .= " "; グローバル $$var .= $var. ==> $str . = ss_as_string($$var, column+1)." n" ; $i = 0; $i < $i++) "; } return $str.); } } function ss_as_string (&$thing, $column = 0) { if (is_object($thing)) { return ss_object_as_string($thing, $column); } elseif (is_array ($thing)) { return ss_array_as_string($thing, $column); } elseif (is_double($thing)) { return "Double(".$thing.")" } elseif (is_long($thing)); "Long(".$thing.")"; } elseif (is_string($thing)) { return "String(".$thing.")" } } else { return "Unknown(".$thing."); "; } }

必要に応じて、次のコードをプログラムに追加するだけで、プログラムで使用されている変数 (配列やオブジェクトを含む) の型と値を表示できます。

echo ss_as_string($my_variable);

次のステートメントを使用すると、プログラム内のすべての変数の値を直接表示できます:

echo ss_as_string($GLOBALS);

3. ログ情報を制御する機能

PHP プログラムをデバッグするもう 1 つの重要な方法は、ログ情報を表示することです。ログ情報のレベルやログ情報の表示内容を簡単に制御できれば、プログラムのデバッグがさらに便利になります。この機能は以下の関数で簡単に実現できます。

$ss_log_level = 0; $ss_log_filename = /tmp/ss-log; $ss_log_levels = array( NONE => 0, ERROR => 1, INFO => 2, DEBUG => 3);レベル = エラー) { グローバル $ss_log_level; $ss_log_level = $level; } function ss_log ($level, $message) { global $ss_log_level, $ss-log_levels; if ($ss_log_levels[$ss_log_level] $level]) { //ログ情報を表示しません return false; } $fd = fopen($ss_log_filename, "a+"); fputs($fd, $level. - [.ss_timestamp_pretty().] - .$メッセージ。" n"); fclose($fd); } 関数 ss_log_reset () { グローバル $ss_log_filename }

上記の関数には、ログレベル変数が4つあります。 PHPプログラム実行時、ログレベルがあらかじめ設定したレベル値より低い場合にのみログ情報を記録・表示できます。

例えば、プログラムに次のステートメントを追加します。

ss_log_set_level(INFO);

すると、PHPプログラムを実行すると、ERRORとINFOレベルのLOG情報のみが記録・表示され、DEBUGレベルの情報は無視されます。さらに、次のステートメントを使用して、表示される情報の内容を設定することもできます:

ss_log(ERROR, "テストレベルエラー");

ss_log(INFO, "テストレベルINFO");

ss_log(DEBUG, "テストレベルDEBUG");

4.スピードテスト機能

コードを最適化するには、コードの実行時間をテストして最適なコードを選択できるメソッドが必要です。次の関数は、コードの実行にかかる時間をテストできます:

関数 ss_timing_start ($name = デフォルト) { global $ss_timing_start_times[$name] =explode( , microtime()) } function ss_timing_stop ($name = デフォルト) { global $ss_timing_stop_times; explode(, microtime()); } 関数 ss_timing_current ($name = デフォルト) { グローバル $ss_timing_start_times, $ss_timing_stop_times; if (!isset($ss_timing_start_times[$name])) { return 0 } if (!isset($ss_timing_stop_times) [$name])) { $stop_time =explode(, microtime()); } else { $stop_time = $ss_timing_stop_times[$name] } $current = $stop_time[1] - $ss_timing_start_times[$name]; ; $current += $stop_time[0] - $ss_timing_start_times[$name][0]; }

これで、任意のコードの実行時間を簡単に確認できるようになり、上記の関数を使用するときに、複数のタイマーを同時に使用することもできます。

5. データベース操作のデバッグと最適化

データベースの場合、実行速度は非常に重要です。データベースを迅速に実行する方法を説明する書籍や記事は数多くありますが、すべての方法は実際にテストする必要があります。次に、PHPLib 関数ライブラリの query() 関数と上記で紹介した関数を組み合わせて、新しい query() 関数を作成します。元の関数と比較して、この関数は実行時間監視関数を追加します。

関数 query($Query_String, $halt_on_error = 1) { $this->connect(); $this->Query_ID = @mysql_query($Query_String,$this->Link_ID); ; ss_log(INFO, ss_timing_current().Secs - .$Query_String); $this->Errno = mysql_errno(); halt_on_error && !$this->Query_ID) { $this->halt("無効な SQL: ".$Query_String) } } return $this->Query_ID;

美しいコードを書きましょう

1. バックグラウンドプログラムをフロントエンドプログラムから分離する

PHP プログラムを作成する場合、一部のコードはデータベースの操作、数学的演算の実行など、トランザクションの処理に使用されますが、他のコードはトランザクション処理の結果を表示するためにのみ使用されます。たとえば、echo ステートメントを使用してトランザクションを表示するコードもあります。 Web ブラウザに表示される HTML 形式の PHP コードと、PHP プログラムに直接埋め込まれる HTML コードです。まず、これら 2 種類のコードを明確に区別し、前者をバックグラウンド プログラム、後者をフロントエンド プログラムと呼ぶ必要があります。

PHP は組み込みプログラミング言語であるため、つまり、すべての PHP コードを HTML コードに埋め込むことができ、プログラム作成に多くの利便性をもたらします。ただし、極端な場合は、その逆を行う必要があります。長いプログラムの中で PHP コードと HTML コードを混在させると、プログラムが乱雑になり、プログラムの保守や読み取りに不利になります。

そこで、これらのプログラムの HTML コードに混在する PHP コードを可能な限り移植し、これらのコードを特殊なファイル内の関数にカプセル化してから、HTML コード内の include ステートメントを使用してこれらのファイルを、適切な Justこれらの関数を呼び出します。

このアプローチにより、HTML コードと PHP コードの両方がシンプルで読みやすくなる一方で、HTML コードは常に更新される必要があるため、この分離方法によりバックグラウンド プログラムが更新されないようにすることができます。破壊されました。フロントエンド プログラムとは異なり、バックエンド プログラムは安定性と構造を追求し、ほとんど変更されないため、慎重に設計および管理する必要があります。実際、「今すぐ木を植えて、後で日陰を楽しむ」というデスクトップ プログラムを設計するときに、多くの時間を投資する価値はあります。今作成しているバックグラウンド プログラムを将来の設計作業で簡単に使用できるようになります。

2. 同梱ファイルを柔軟に活用する

前述したように、バックグラウンドプログラムは一連のインクルードファイルに配置する必要があります。インクルードされたファイルは、必要に応じて include ステートメントを使用して動的にロードすることも、php.ini ファイルの auto_prepend_file ディレクティブを使用して事前に自動的にロードすることもできます。後者の方法を使用すると、一度限りの利点が得られますが、注意すべき欠点もいくつかあります。

次のコードは、巨大なインクルード ファイルの解析にかかる時間を示しています。

require(timing.inc);

ss_timing_start();

include(test.inc);

ss_timing_stop();

エコー

.ss_timing_current().

;

上記のコードでは、test.inc は 1000 行のインクルード ファイルです。実行結果から、このインクルード ファイルの解析に 0.6 秒かかることがわかります。大規模な Web サイトの場合、この速度は無視できません。インクルード ファイルを使用するもう 1 つの欠点は、ファイル内のステートメントでエラーが発生すると、Web サイト全体の PHP プログラムが実行できなくなることです。したがって、非常に慎重に使用してください。実際、インクルード ファイルを少し処理することで、必要な場合にのみインクルード ファイルを解析できます。

次のコードにより、プログラムで必要な場合にのみ abc.inc ファイルが解析されます。

if ( 定義( __LIBA_INC) ) return;

define(__LIBA_INC, 1);

/* * コード... */

3. オブジェクト指向プログラミング手法を使用する

PHP もオブジェクト指向言語です。オブジェクト指向プログラミング手法は、優れたプログラマーから高く評価されているソフトウェア設計手法です。PHP プログラミングでは、オブジェクト指向言語の利点を最大限に発揮し、オブジェクトをカプセル化できます。プログラミング。たとえば、前のコードでは、データベースを管理するときに、query() 関数をデータベース クラスにカプセル化することで、コード管理が大幅に容易になり、プログラムの可読性が向上しました。

プログラミング速度ではなく、プログラム速度を追求

Webサイト構築においては、プログラムの実行速度とWebページのダウンロード速度が成否に関わる重要な要素となります。 Web プログラマーは、コードの実行速度にもっと注意を払う必要があります。以下に紹介するいくつかの方法はいずれも、コードの実行速度をさまざまな程度に向上させます。

1. PHPのechoステートメントの代わりに埋め込みHTMLコードを使用します。

PHPは組み込みWebプログラミング言語であるため、HTMLコードとPHPコードを相互に埋め込むことができます。ただし、多くのプログラマは、HTML コードに PHP コードを埋め込むために "" を過剰に使用すると、PHP インタープリタが複数回呼び出され、PHP コードの実行速度が低下することを懸念しているため、HTML コードの出力には PHP の echo ステートメントを使用することを選択します。 HTML コードを直接使用します。

しかし、真実は全く逆です。各 PHP ページは、すべての PHP コードを解釈するために PHP インタープリタを 1 回だけ呼び出します。そのため、必要な場合にのみ PHP コードを埋め込み、ほとんどの場合は HTML コードを直接使用して結果を入力すると、プログラムの実行速度が低下することはありません。また、echo ステートメントの解析が軽減されるため、コードの実行速度が向上する場合があります。次のコードは、私たちの結論を示しています。このコードでは、前に紹介した時間テスト関数を使用します。

2. ereg-replace の代わりに str-replace を使用します

PHP での ereg_replace の使用法は Perl でのパターン マッチングの使用法に似ているため、Perl でのプログラミングに慣れているプログラマは、文字列置換作業を完了するために ereg_replace を使用することをより積極的に行います。ただし、以下のコードは、ereg_replace の代わりに str_replace を使用するとコードの速度が大幅に向上することを証明しています。

str_replace と ereg_replace の実行速度をテストします:

//このコードは str_replace 強調の実行速度をテストします ?>

;

for ($i=0; $i str_replace(i>, b>, $string).

;

}

//このコードは ereg_replace の実行速度をテストします

for ($i=0; $i

ereg_replace(<([/]*)i>, <\1b>, $string).

;

}

3. 文字列参照に注意してください

PHP は、他の多くのプログラミング言語と同様に、二重引用符 ("") を使用して文字列を引用することも、一重引用符 () を使用することもできます。ただし、PHP では、二重引用符を使用して文字列を引用すると、PHP パーサーはまず文字列内に変数への参照があるかどうかを分析し、変数がある場合はその変数を置き換えます。一重引用符の場合は、それほど複雑ではありません。一重引用符で囲まれたすべての文字列が直接表示されます。明らかに、PHP プログラミングでは、二重引用符よりも一重引用符を使用して文字列変数を引用する方が高速です。

4. データベース内での和集合演算の使用を避ける

他の Web プログラミング言語と比較して、PHP のデータベース機能は非常に強力です。ただし、PHP でデータベースを実行するのは依然として非常に時間と労力がかかるため、Web プログラマはデータベース クエリ操作を最小限に抑え、データベースに適切なインデックスを確立する必要があります。

もう 1 つ注意すべき点は、PHP を使用してデータベースを操作する場合、複数のデータ テーブルの結合操作を使用しないようにしてください。結合操作はデータベースのクエリ機能を強化できますが、サーバーの負荷が大幅に増加します。この問題を説明するために、以下の簡単な例を見てみましょう。

データベースに foo と big_foo という 2 つのデータテーブルを作成しました。データテーブル foo には、1 から 1000 までのすべての自然数を含むフィールドが 1 つだけあります。データ テーブル big_foo にもフィールドは 1 つしかありませんが、1 から 1,000,000 までのすべての自然数が含まれています。したがって、サイズの点では、big_foo は foo とそれ自体を組み合わせたものと等しくなります。

$db->query("select * from foo");

0.032273秒

$db->next_record();

0.00048999999999999秒

$db->query("foo 値に挿入 (NULL)");

0.019506秒

$db->query("select * from foo as a, foo as b");

17.280596秒

$db->query("select * from foo as a, foo as b where a.id > b.id");

14.645251秒

$db->query("select * from foo as a, foo as b where a.id = b.id");

0.041269秒

$db->query("select * from big_foo");

25.393672秒

上記の操作結果から、1,000 レコードを持つ 2 つのデータ テーブルを結合する速度は、1,000,000 レコードを持つ大規模なデータ テーブルを個別に操作する場合よりもそれほど速くないことがわかります。

5. include と require の違いに注意してください

PHPプログラミングでは、include()とrequire()は同じ機能ですが、include()は条件付き包含関数、require()は無条件包含関数です。たとえば、次の例では、変数 $somgthing が true の場合、ファイル somefile がインクルードされます:

if($something){

include("somefile");

}

しかし、$something の値が何であっても、次のコードはファイル somefile をファイルにインクルードします:

if($something){

require("somefile");

}

次の興味深い例は、これら 2 つの関数の違いを完全に示しています。

$i = 1;

while ($i

require("somefile.$i");

$i++;

}

このコードでは、プログラムはループするたびに同じファイルをインクルードします。明らかに、これはプログラマーの本来の意図ではありません。コードから、このコードが各ループに異なるファイルを含めることを望んでいることがわかります。この関数を完了したい場合は、関数 include();

を使用する必要があります。

$i = 1;

while ($i

include("somefile.$i");

$i++;

}

6. echoとprintの違いに注意してください

PHPのechoとprintの機能は基本的に同じですが、両者には微妙な違いがあります。たとえば、次のコードを実行すると、変数 $res の値は 1 になります。

$ret = print "Hello World";

これは、print は一部の複雑な式で使用できるが、echo では使用できないことを意味します。同様に、コード内の echo ステートメントは値を返す必要がないため、print ステートメントよりもわずかに高速に実行されます。

上記は、優れた PHP 開発者になるための 3 つの原則の分析です。Green Tea の編集者は、PHP を学び始めたばかりの友人に次のことを伝えたいと思います。最初はすべてが難しいですが、努力さえすれば大丈夫です。 、報酬が得られます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/919975.html技術記事 PHP プログラマーが従わなければならない PHP プログラミング ガイドライン 優れた PHP 開発者になるにはどうすればよいでしょうか? これは、PHP 初心者なら必ず抱く疑問です。実際、PHP プログラミングのマスターになるには...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。