ホームページ >バックエンド開発 >PHPチュートリアル >Drupal/PHP 開発プログラム 1.2 の内部使用

Drupal/PHP 開発プログラム 1.2 の内部使用

WBOY
WBOYオリジナル
2016-06-13 13:11:34912ブラウズ

Drupal/PHP 開発仕様 1.2 の内部使用
まえがき
ことわざにあるように、「ルールがなければルールも存在しない」。開発者やプロジェクト マネージャーにとって、適切なプログラミング スタイルと仕様は非常に重要です。
ソフトウェア プロジェクトが公的で一貫した標準に準拠しようとすると、プロジェクトに参加する開発者がプロ​​ジェクト内のコードを理解し、プログラムのステータスを明確にすることが容易になります。これにより、新しい参加者がすぐに環境に適応できるようになり、一部の参加者が時間を節約する必要から自分のスタイルを確立したり、生涯にわたる習慣を身につけたりして、他の参加者が読書に過度の時間とエネルギーを浪費することを防ぎます。また、一貫した環境では、コーディング エラーの可能性も減らすことができます。欠点は、人によって基準が異なるため、コーディング スタイルに適応して変更するのに時間がかかり、一時的に作業効率が低下することです。プロジェクトの長期的な健全な発展と、後期におけるチームの作業効率の向上を考慮すると、一時的な作業効率の低下は考慮する価値があり、必ず通過しなければならないプロセスでもあります。標準はプロジェクトの成功の鍵ではありませんが、チームのコラボレーションをより効率的にし、確立されたタスクをよりスムーズに完了するのに役立ちます。

第 1 章、組版ルール

1.1、インデント
コードのインデントには、タブ キーの代わりに 2 つのスペースを使用します。これは、別のエディタでコードを表示する場合、タブ キーが使用されるためです。表示される長さは次のとおりです。また、スペースがあるとファイル サイズは大きくなりますが、これらのエラーは重要ではありません。
タブ キーの使用に慣れている場合は、多くのエディタでタブ キーを 2 つのスペースに設定できます。

1.2. スペースのルール
スペースは次の状況で使用する必要があります:

1. キーワードと ( 例:
while ($user->uid > 0) {
?>
2. 関数名と ( の間にスペースを入れてはいけません。例:
function arg() {
?> for ステートメントでは、「;」の後にスペースが続く必要があります。

1.2.1。論理演算子の前後にはスペースを入れ、プラス 1 またはマイナス 1 を指定します。演算を除く
// 正しい
$a == $b;
// 間違っています
$a==$b;
$a ==$b ;
// 正しい
$a++;
$a--;
// 間違っています
$a + +;
$a --;
?>



1.2.2. 複数のパラメータを区切る場合はスペースを追加する必要があります
// 正しい
$a, $ab, $c;
arg($a, $b, $c);
// エラー
$a,$ab,$c;
arg($a,$b,$c);
? >



1.2.3. 構文キーワード
の後にスペースを追加する必要があります。 if、for、while、switch など
例:
// ($a = 0;$ <10; $a++);
を修正します。 / Wrong
for($a = 0;$ <10; $a++) ;
?>



1.3. 文字列と変数の接続規則
文字列と変数を接続するには「.」を使用し、「.」スペースの前後に「1」を使用して変数を自動的にエスケープする場合は、変数
の前後に「{}」を追加する必要があります// 正しい
$result = 'file_' . $var;
$result = 'file_{var}';
// エラー
$result = 'file_' .$var;
$result = 'file_$var';
?>



1.4. これらのステートメントが密接に関連している場合を除き、1 行に 1 つのステートメントのみを記述します。プログラムの読みやすさを向上させるために、論理的に関連するステートメントを区切るには空行を使用します。
正しい
$node_types = node_get_types('types', NULL, TRUE);

foreach ($node_types as $type => $info) {
//
}
?>


エラー
$node_types = node_get_types('types', NULL, TRUE);
foreach ($node_types as $type => $info) {
//
}
?>



1.5、キーワード
if、ステートメントfor、do、while、case、switch、default などは独自の行を占め、if、for、do、while およびその他のステートメントの実行ステートメント部分には完全な括弧が必要です。{}
例:
正しい
if (NULL == $arg) {
return;
}
?>


エラー
< ;? php
if (NULL == $arg) return;
?>



1.5.1、if
の形式は次のとおりです:
if (条件) {
//
}

if (条件) {
//
} else {

}

if (条件) {
//
} else {
//
}
?>



1.5.2, for
形式は次のとおりです:
for ($i = 0; $i <1; $i++) {
//
}
?>



1.5.3. do
の形式は次のとおりです:
他の複合文とは異なり、do 文は常に「;」で終わります。
do {
//
} while (条件);
?>



1.5.4, do
形式は次のとおりです:
switch (式) {
case 式:
ステートメント;
デフォルト:
ステートメント;
}
?> ;


ステートメントの各セット (デフォルトを除き、break、return、または throw で終了する必要があります。連続して実行させないでください。)



1.5 .5。try
の形式は次のとおりです:
try {
ステートメント
} catch (変数) {
ステートメント
}
?>



1.6. データベース

※クエリ文のキーワード部分は大文字にする必要があります。

第 2 章、命名規則
命名は、PHP、XHTML、CSS、JS などの Linux C 命名規則に従います。
変数名のすべての文字は小文字であり、各単語の区切り文字として「_」を使用します(CSS では「-」を使用します。これは、drupal によって生成されるコードの多くが「-」を使用するためです(ブロック ID など、通常は次のようなものです) #block -vacation) )、プログラムを一目で理解できるように、変数名には特定の意味が必要です。
プロジェクト内では、同じ意味を持つ変数はできるだけ同じ変数名にする必要があります。たとえば、drupal プロジェクトの $node は、多くの場所で同じ名前が使用されます。これがノードであることが一目でわかり、ノード関連の関数操作を使用できます。複数のノードを区別したい場合は、前に意味のある文字を追加できます (例: $book_node、$color_node)。

2.1. 定数
PHP 定数はすべて大文字を使用し、単語を正しく区切るには _ を使用する必要があります。
一般的に使用される単語との競合を避けるために、定数にはモジュール名が接頭辞として付けられます。例: モジュールの名前が test.module の場合、定数名は TEST_USER のようにする必要があります。
define('TEST_CONFIRM_UID', 0);
?>



2.2. グローバル変数
グローバル変数の命名規則: $ _モジュール名(テーマ名)_グローバル変数名
例:
// エラー
グローブ $records;
// 正しい
グローブ $_test_records;
?>



2.3. 静的変数
静的変数は接頭辞 s を使用します (例:
$s_records;
?>) ;



2.4. 一時変数
ループ内で頻繁に使用される $i、$j などの一時変数は、他の目的で使用しないでください。

2.5. 関数の名前付け
関数名は C GUN の規則に従い、名前はモジュール名 + _ + 関数名となります。 Drupal 関連のフック名が付いています。

2.6. ファイル名
ファイル名はすべて小文字にする必要があります。例外は文書ファイルで、すべて大文字で、タイプが txt ファイルです。
例:
LICENSE.txt
README.txt
INSTALL.txt

第 3 章、プログラミング仕様
システムはタイムスタンプ time() をタイムマークとして均一に使用します。 . mysql に保存する場合は INT(10) 型を使用します。
引用符には一重引用符を使用し、引用符が重なる場合にのみ二重引用符を使用すると、プロセスごとに数百 K のメモリを節約できます。

を均一に使用 キーと値には一重引用符または二重引用符を使用する必要があります。
// 正しい
array(
'name' => 'myname',
'type' => 'mytype'
);
// エラー
array(
name => myname,
type => mytype
);
?>



3.2 、変数/関数のテストにデフォルトの方法を使用しないでください
// Correct
if ($user > 0) {
//
}

if (arg(1) != '') {
//
}
// エラー
if ($user) {
//
}

if (arg(1)) {
//
}
?>



3.3. ファイル構造の規則
drupal モジュールの開発規則は次のとおりです (モジュール名 book を例にします):
メイン モジュール (book.module) には、hook_help()、hook_init()、hook_menu() が含まれており、必要に応じてこのモジュールのいくつかの共通関数を呼び出します。他のモジュールの機能 (有効にする必要がある (コア モジュールを除く)) を使用するには、まずモジュールが有効かどうかを確認する必要があります (例: module_exists('book');)。
book.admin.inc(管理ページに関連するコード)とbook.page.inc(ユーザー操作に使用するコード)をカテゴリに配置し、hook_menuの「file」キーでポイントする必要があります。
jquery プラグインなど、モジュールで使用される一部の js プラグインは、モジュール ディレクトリの js フォルダーに配置する必要があります。

3.4. データベース操作ルール

※ 1 つ以上のレコードをクエリする場合は、db_query_range() を使用します。
* 可能であれば、すべてのクエリに ORDER を追加して INDEX で並べ替える必要があります。

3.5. コメント
コメント ドキュメントは Doxygen コメント スタイルに従います。コメント ブロックの構文は次のとおりです (CSS、JS を含む):
/**
*hook_cron() の実装
  */
function node_cron() {
db_query('DELETE FROM {history} WHERE timestamp < %d', NODE_NEW_LIMIT);
}
?>


コメントブロックは必須です。関数の直前に、間に空白行を入れずに配置してください。
drupal は、以下にリストされている Doxygen コンストラクトを理解できます。特定のコンストラクト関数については、Doxygen のドキュメントを参照してください。



* @mainpage
* @file
* @ defgroup
* @ingroup
* @addtogroup
* @param
* @return
* @link
* @see
* @{
* @}

3.5.1, // $id$
"// $id$" はバージョン番号と最後に変更されたユーザーを追跡するために使用され、各ファイルの先頭にコメントとして配置されます ( js、css などを含む。リポジトリに送信する必要があるすべてのファイル)。コードが CVS (SVN) に送信されると、システムはこのタグを自動的に解析して展開し、次のようになります:
// $Id: node.module,v 1.947.2.29 2010/ 12/15 12:53:33 goba Exp $
?>



第 4 章、安全なコードの作成
4.1、ユーザー入力と出力の処理
データ送信非 Drupal のフックフォームによって生成されたフォーム (一部の Ajax を含む) では、セキュリティのためにフィルタリングする必要があります。以下に、drupal が提供するいくつかのフィルター関数を示します。

* check_plain(HTML)、プレーンテキストに変換、特定の文字を HTML エンティティに変換します。
* filter_xss(HTML)、一連のタグを使用して HTML をチェックおよびクリーンアップします
* check_markup(HTML)、フィルター (カスタマイズ可能) を使用してフィルタリングします
* drupal_urlencode(URL)、特定の文字をエンコードしますinto %0x
* check_url(URL)、javascript:runevilJS()

など、URL 内の有害なプロトコルをクリーンアップします。通常、出力では、t() 関数を使用して出力をフィルタリングする必要があります。 Drupal 言語モジュールをサポートします。
4.2. mysql ステートメントの処理
データベースの追加、削除、クエリ、および変更操作を実行する場合は、db_query() 関数を使用する必要があります (drupal7 の使用方法が変更されています。関連情報を参照してください)詳細)。データベース接頭辞がある場合に自動的に決定できるように、テーブル名には中括弧を使用する必要があります。次のように:
/**
*hook_cron() の実装
  */
function node_cron() {
db_query('DELETE FROM {history} WHERE timestamp < %d', NODE_NEW_LIMIT) ;
}
?>



4.2.1. db_rewrite_sql() を使用してプライベート データを保持する
ノード アクセス モジュールが有効になっている場合は、ノード アクセスを実行します。パーミッション制御を行わないと、db_query() で直接検出されたデータをパーミッションでフィルタリングすることができません。このとき、一部のノードデータの操作では、mysql ステートメントがパーミッション部分を処理しない場合、db_rewrite_sql() を使用する必要があります。この機能を使用する必要があります。例:
$result = db_query(db_rewrite_sql("SELECT DISTINCT b.* FROM {blocks} b LEFT JOIN {blocks_roles} r ON b.module = r.module AND b.delta = r .delta WHERE b.theme = '%s' AND b.status = 1 AND (r.rid IN (".db_placeholders($rids) .") OR r.rid IS NULL) ORDER BY b.r​​egion, b.weight , b.module", 'b', 'bid'), array_merge(array($theme_key), $rids));
?>



第 5 章、その他重要なその他の事項

* どうしても必要な場合を除き、drupal コアのコードを変更しないでください。変更がある場合は、開発ドキュメントに記録する必要があります。
* モジュール内の HTML 表示部分にはデフォルトのスタイルを使用してみてください。たとえば、table (theme('table', $header, $rows))、list (theme('item_list', $items)) です。 、など特殊なスタイルなど テーマ切り替え時に使えなくなってしまわないよう、HTMLやCSSはテーマに依存せずモジュールで記述する必要がある部分があります。
* すべてのリンクは l() 関数を使用する必要があります。この関数は、Web サイトの移行後にデッドリンクを回避するために、Web サイトのルート ディレクトリの場所を自動的に決定します。
※アクセス許可制御は可能な限りhook_menuにまとめ、関数内での判定が多すぎないようにしてください。

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