phpの開発手順

WBOY
リリース: 2016-06-13 12:56:49
オリジナル
889 人が閲覧しました

PHP 開発仕様
ファイル形式
php コードのみを含むファイルの場合、ファイル末尾の「?>」は無視されます。
クロスクライアント プログラマ ソフトウェア [エディタ設定] の柔軟性を確保するには、タブ文字 TAB の代わりに 4 つのスペースを使用します。
コードの各行が画面の幅を超える場合は、可読性を高めるために手動で強制的に折り返す必要があります。
各行の末尾に余分なスペースを含めることはできません。ファイルの末尾にあるスペースは削除してください。ただし、[エディタの設定] の最後には空白行が必要です。
すべてのプログラムのエディタ設定を UNIX 形式で保存してください。

命名規則
1. 定数定義はすべて大文字で、_ コネクタを使用できます。

例:
define('TEST' , 'Hello World !');
const TEST = 'Hello World!';

2. 変数は小文字とアンダースコアで構成され、プライベート変数と保護された変数には _ 接頭辞が使用されます。 🎜> 例:
public $per_page = 10;
protected $_user = null;
private $_db = null;

3. 関数名は小文字とアンダースコアを使用して形成されます。

例: function get_client_ip();

4. クラス名とメソッド名は、最初の文字が小文字で、その後の各文字の最初の文字が「キャメルケース」で命名されます。下線は使用できません。また、名前は「動詞 + オブジェクト」の形式で指定する必要があります。機能を説明するのは 5 単語以内にしてください。メソッドは明確に

例:
public function getUserInfo();
get( Verb) UserInfo (object)

5. パラメーター名はキャメルケースで指定する必要があります。パラメータの数は 5 を超えてはなりません。その他の場合は、配列形式
を使用してください。コメントは、メソッドの目的とパラメータの意味を明確にするために PHPDoc 形式である必要があります。

例:
/* *
* addData
* データの追加
*
* @param integer $uid ユーザー ID
* @param array $data コンテンツの共有
* @return boolean
*/


コード仕様
1. 文字列がプレーン テキストで構成される (つまり、変数が含まれない) 場合は、一重引用符 (') を使用します。区切り文字。 2. 変数置換の変数は、{$+変数名}

の形式のみ許可されます。例: $greeting = "Hello {$name}, welcome back!";

3. 読みやすさを高めるために、コネクタ「.」、「=」およびその他の演算子の間にスペースを使用します

例:
には、比較演算子 (>、<、>= の間) が含まれます。 、<=、==、===、!=、<>、!==)、代入演算子 (=)、数学演算子 (+、-、​​、/、%)、ビット演算子 (&、 |、^、~、>>、<<)、論理演算子 (!、&&、||)、コロン (:)、
疑問符 (?)、文字列連結演算子 (.)、前文字列接続代入演算子 (.=) の後、左括弧 (() の前 (関数呼び出しを除く)、およびコンマ (,) の後は、スペースを使用して区切ってください。
echo 'My name is' . $name;
$name = 'bosnzt';
$num ++;

4. メソッドと関数のパラメータは、カンマ + スペース "、"、() で区切られます。間にスペースを入れる必要があり、メソッド名との間にスペースがあってはなりません。{ とメソッド名は同じ行に置く必要があり、メソッド

の間にも空行が必要です。例:
public function addData($uid, $data = array()) {
// TODO
}

5. 配列型はカンマ + スペースで区切られます。 "。連想配列はできるだけ複数行に分割し、それぞれの行のキーと値を揃えて見た目の美しさを保つようにします。"=>"
例:
$data = array(1, 2, 3);
$data = array(
'name' => 'bosnzt',
'uid' = > '100000',
);

6. if、for、foreach、while、do while などは、{} を使用する必要があり、同じ行に置くことはできません。 } の終わりの後の空行。内部の条件はカンマ + スペース「,」で区切られ、インデントされたままになります。

例:
if (!$uid) {
// TODO
}

for ($i; $i // TODO
}

foreach ($data as $key => ; $val) {
// TODO
}

7. "switch" ステートメントの内容は 4 つのスペースで終わる必要があります。 "case" 条件によって制御される内容は次のようになります。スペース 4 つでインデント

例:
switch ($indentedSpaces) {
case 2:
echo " Error";
Break;
case 4:
echo "Correct";
Break;
デフォルト:
Break;
}

8. 単一行のコメント // とテキストはスペースで区切られ、先頭に揃えられます。複数行のコメント * とテキストはスペースで区切る必要があります

例:
/*
* 1. 将来的に重要なロジックを忘れることを防ぐために、ロジックをできるだけ複数行のコメントを使用して記述します
* 2. または、開発プロセス中に一部のロジックが非常に複雑で、自分で理解することが難しい場合は、最初にロジックを記述します。複数行のコメントでは、開発中の混乱を避けるのに役立ちます。コードの上部の行は空にしておきます
if (!$uid) {
$name = 'Tom';
}

9. SQL キーワードは大文字で、その他の単語は小文字です。 🎜>
SELECT field1 AS something, field2, field3
FROM table a, table b
WHERE (this=that) AND (this2=that2)

10 の場合はネストしないようにしてください。 /foreach/for 4 レベルを超える、ネストのレベルが 4 を超えると、可読性は非常に低くなりますが、ほとんどの場合は最適化できます
11. メソッド内のコードの行数は 80 行以内に制御されます。余分な部分を複数のサブメソッドに分割


PHP 5.3


1. 名前空間のサポートを追加しました。
2. static 遅延バインディングのサポート。3. ジャンプ タグのサポートを追加しました。
goto a;echo 'Foo';

a:
echo 'Bar';
?>

4. ネイティブ クロージャー (Lambda/匿名関数) のサポートを追加しました。

array_map(function Closure($arg) ) use ($var,....) {}, $array);

5. __callStatic (静的メソッドへの動的アクセスが可能になります。) と __invoke (オブジェクトは

class MethodTest {

public function __call($name, $arguments) {

// 注: $ の値name は大文字と小文字を区別します。
echo "オブジェクト メソッド '$name' "
. implode(', ', $arguments) . > /**  PHP 5.3.0以降 */
function __callStatic($name, $arguments) {

// 注: $name の値は大文字と小文字が区別されます。
echo "静的メソッド '$name' の呼び出し "
. , $arguments) . "n";
}
}

$obj = new MethodTest;
$obj-> ;runTest('in object context');

MethodTest::runTest('in static context'); // PHP 5.3.0 以降
?>

6. Heredoc 構文に似ていますが、一重引用符が含まれる Nowdoc 構文のサポートが追加されました。 .
7. Heredoc を使用して静的変数とクラスのプロパティ/定数を初期化できるようになります。
8. 二重引用符を使用して Heredoc を宣言できるようになり、Nowdoc 構文が追加されました。
9. const キーワードが使用できるようになりました。
10. 三項演算子は短い形式です: ?:.

$value = $planA ?: $planB;

11.
12. 循環参照のガベージ コレクターが追加され、デフォルトで有効になります。

void gc_enable ( void )
循環参照コレクターをアクティブにするには、zend.enable_gc を 1 に設定します。


後方非互換性

既存の PHP 5 コードのほとんどは変更なしで動作しますが、いくつかの後方互換性のない変更点に注意してください:

新しい内部パラメータ解析 API には、 PHP 5.3.x のすべてのバインディング拡張機能に適用されます。互換性のないパラメーターが関数に渡されると、NULL が返されます。ただし、関数 get_class() など、エラーが発生した場合には FALSE が返されます。 >
clearstatcache() は、デフォルトでキャッシュされた realpath をクリアしなくなりました。

realpath() は完全にプラットフォームに依存しなくなり、__FILE__ などの相対パスは無効になります。

call_user_func() 一連の関数は、呼び出し先が親クラスであっても $this を使用します。配列関数 natsort()、natcasesort( )、usort()、uasort()、 uksort()、array_flip()、および array_unique() は、オブジェクトを引数として受け入れなくなります。これらの関数をオブジェクトに適用する場合は、まずオブジェクトを配列に変換します。

パラメータを渡す関数の動作。値によって呼び出されたときに参照が変更されました。以前は、関数は値によって渡されたパラメーターを受け入れていましたが、現在は、以前は参照によって渡されることが予想されていた関数が、定数またはリテラル値を含む関数で呼び出された場合、致命的なエラーをスローします。変数を呼び出す前に変数に値を代入します。

新しい mysqlnd ライブラリでは、MySQL 4.1 の新しい 41 バイトのパスワード形式を使用する必要があります。古い 16 バイトのパスワードを使用し続けると、mysql_connect() および他の同様の関数で「mysqlnd は古い認証を使用して MySQL 4.1 以降に接続できません。」エラーがスローされます。

新しい mysqlnd ライブラリは MySQL を読み取れなくなります。構成ファイル (my.cnf/my.ini)。これは、libmysql ライブラリの古いバージョンとは異なります。コードがこれらの構成ファイルに依存している場合は、mysqli_options() を使用して明示的にロードできます。での MySQL サポートは mysqlnd を使用してコンパイルされ、PDO 固有の定数 PDO::MYSQL_ATTR_READ_DEFAULT_FILE および PDO::MYSQL_ATTR_READ_DEFAULT_GROUP は未定義になります。

SplFileInfo とその関連ディレクトリ クラスは、末尾の /.
を削除します。
__toString マジック メソッドはパラメータを受け入れなくなりました。

マジック メソッド __get、__set、__isset、__unset、__call は常に public である必要があり、メソッドの署名は必須です。

__call マジック メソッドは、プライベート メソッドと保護されたメソッドにアクセスするときに呼び出されるようになりました。

関数内にファイルが含まれるか、必要な場合、そのファイル func_get_arg()、func_get_args()、および func_num_args() 関数は使用できなくなります。 。

MHASH 拡張機能の外側にラップされた新しいシミュレーション レイヤーを追加しました。ただし、すべてのアルゴリズムが関係しているわけではありません。s2k ハッシュ アルゴリズムに注目する価値があります。これは、s2k ハッシュ アルゴリズムが PHP 5.3.0 では利用できなくなったことを意味します。

次のキーワードは予約されており、関数名、クラス名などとして使用できません。

goto
namespace


PHPDOC
PHPDOC をチェックしてください

MySql Tips
1. インデックス

単純な SQL ステートメントに対して適切なインデックスを確立して効率を効果的に高め、クエリ条件が多い場合には複合インデックスを作成します。たとえば、インデックス a_b_c (a,b,c) には、(a,b,c)、(a,b)、および (a) の 3 つのインデックスがあります。
順序は要件に従って設定する必要があります。集中型アプローチはインデックス
1 に影響を与えます。条件範囲の判断がある場合、ストレージ エンジンは B ツリー アルゴリズムにより最初の条件範囲の右側の列を最適化できません。つまり、後続のインデックスは失敗します。
例: SELECT * FROM t1 WHERE a=a1 AND b>b1 AND c=c1; このとき、インデックス (a,b,c) が変更されると、インデックス (a,b) が有効になります。 a_c_b (a, c, b) にインデックスを付けると、効果は以前よりも良くなります。
2. 過剰なインデックス作成を避けます。インデックス ID に 1、2、および 3 の 3 つの値しかない場合、インデックスは効果がありません。
3. null を含むインデックスは無効になります。
4. クエリ速度を向上させ、ディスク I/O を削減するには、短いインデックスを使用します (インデックスの長さの範囲を設定します)。
5. <> と NOT IN インデックスの使用は失敗し、テーブル全体がスキャンされます。
6. 列を操作しないでください。例:select * from user where YEAR(data)>2012; によりインデックスが失敗し、テーブル全体がスキャンされます。

2. 複数テーブル結合クエリの最適化

複数テーブル結合クエリの分析には Explain を使用してください。プロファイルを使用してパフォーマンスを確認します。 Explain では SQL ステートメントの最適化提案が提供され、プロファイルでは各ステップの時間のかかる操作を表示できます。
使用プロセスを説明し、タイプ、キー、追加フィールドの値に焦点を当てます。
タイプの並べ替えを最良から最悪の順に行います: system、const、eq_reg、ref、rang、index、およびすべての
余分な要素を最適化する必要があります: filesort を使用するか、一時的なものを使用します。 (一時を使用する必要がある場合、プロファイルにディスク上の tmp テーブルへのコピーがある場合は、ディスクへの書き込みを防ぐために tmp_table_size を増やす必要があることに注意してください。)
キー: NULL の場合、インデックスが使用されていません。このときSQLを最適化する必要があります。
行: ID に基づいて句の実行順序を把握します。最初に大きい、次に小さい、サイズが同じ場合は、最初に上、次に下です。このように、小さい行が最初に実行され、それに応じてステートメントが最適化される必要があります。

3. その他

特効薬はなく、選択肢があるだけです。
空間を時間に置き換えることは、常に最も効果的かつ最も簡単です。データベースのパラダイムを追求しすぎないでください。適切な冗長性は健康にとってより有益です。
内側が大きく外側が小さい場合は in を使用し、内側が小さく外側が大きい場合は存在を使用します。
合計ページ数については、フル テーブル スキャンを避けるために memcache に書き込みます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート