検索
ホームページバックエンド開発PHPチュートリアル2000 行のコードの PHP 学習メモのまとめ、2000 行の PHP 学習メモ_PHP チュートリアル

コード2000行分のPHP学習メモのまとめ、PHP学習メモ2000行

この記事は、PHP 学習におけるさまざまな一般的な問題をまとめたもので、2,000 行以上のコードがあり、そのすべてが非常に実践的なスキルです。参考のためにみんなで共有してください。詳細は以下の通りです

//構文エラー (構文エラー) 構文解析フェーズではソースコードが実行されていないため、出力はありません。

/* [命名規則] */
クラス定数の定数名はすべて大文字にすること、単語はアンダースコアで区切ることをお勧めします // MIN_WIDTH
変数名はアンダースコアで区切ることをお勧めします // $var_name
関数名にはキャメルケースの命名方法を使用することをお勧めします // varName
区切り文字にはすべて大文字を使用することをお勧めします // k;
変数属性 class CLS{public $k = 'hello';} $i = 'k'; $j = new CLS;
変数メソッドクラス CLS{public function k(){echo 'hello';}} $j=new CLS;

/* 変数変数 */
※ ある特定の情報を取得するためのビジネスロジックの判断に使用されます
  $var_name = "クラス名";
  $$var_name = "PHP0913"; // $class_name = "PHP0913";$class_name はメモリに保存されました
  var_dump($class_name); // var_dump($$var_name);

/* 変数関数 */
get_define_vars //定義されたすべての変数(環境変数、サーバー変数、ユーザー定義変数を含む)で構成される配列を返します


/* unset() */
* unset() は現在の変数名と参照を削除するだけで、その値は削除されません
※参照転送では、変数とその参照を削除しても、他の変数と参照は存在し、値も残ります。

   エコー "<br>";
  $v3 = '値';
  $v4 = &$v3;
  設定を解除($v4);
  var_dump($v3, $v4);

/* 変数の最大有効期間 */
※ 現在のスクリプトの実行サイクル。スクリプトの実行が終了すると変数は消えます。


/* 定義済み変数/スーパーグローバル変数 */
$グローバル
$_クッキー
$_ENV
$_FILES
$_GET
$_POST
$_REQUEST
$_サーバー
$_セッション


/* 定数の定義 */
define(定数名, 定数値, [大文字と小文字を区別するパラメータ]) //true は大文字と小文字を区別しないことを意味します/false は大文字と小文字を区別することを意味します
const 定数名 = 定数値 // 新しい、推奨
定数名には特殊文字を使用できます
constant($name) // 定数名を取得します
          //例: echo constant('-_-');


/* 定数関連の関数 */
定義済み
get_define_constants


/* 事前定義された定数 */
__FILE__ ファイルへの絶対パス
__LINE__ ファイル内の現在の行番号
__DIR__ ファイルが配置されているディレクトリ
__FUNCTION__ 関数名
__CLASS__ クラスの名前
__METHOD__ クラスのメソッド名
__NAMESPACE__ 現在のネームスペースの名前


/* 整数型 */
整数は 4 バイトを占め、合計 4*8=32 ビットになります。最大値は 2147483647 で、最小値の絶対値は最大値より 1 大きくなります。
最大値は正と負を表し、1 は負を表し、0 は正を表します


/* 基数変換関数 */
変換できるのは10進数などの基数のみで、種類は6種類のみです。
変換する場合、パラメーターは文字列である必要があります (つまり、8 進数の「0」または 16 進数の「0x」を含めることはできません)。
  12月
   置き場
   10月
  16進数
hexdec() は 16 進数を 10 進数に変換します。 hex2dec() と書くこともできます。
dechex() は 10 進数を 16 進数に変換します。dec2hex() と記述することもできます。
bindec() は 2 進数を 10 進数に変換します。bin2dec() と記述することもできます。
decbin() は 10 進数を 2 進数に変換します。 dex2bin() と記述することもできます。
octdec() は 8 進数を 10 進数に変換します。 oct2dec() と書くこともできます。
decoct() は 10 進数を 8 進数に変換します。dec2oct() と記述することもできます。


/* 浮動小数点数 */
浮動小数点数は比較できません。 ! !
ほとんどすべての小数は、保存すると正確ではなく近似値になります。
最大値: +/- 1.8E308
PHP が保存できる最長の小数点以下の桁: 14 桁

/* 一重引用符で囲まれた文字列 */
一重引用符で囲まれた文字列では、バックスラッシュと一重引用符のみをエスケープできます。

/* 二重引用符で囲まれた文字列 */
文字列を解析するのは 1 回だけです。 ! !
eval は文字列を PHP コードとして実行します
中括弧で変数を囲み、変数名の境界を決定します。例: 「aaa{$bbb}ccc」
ASCIIコードは二重引用符で囲まれた文字に変換できます
"x61" -> a // 文字列に 0 は必要ありません。整数型の先頭には 0x だけが付きます。
「x49x54x43x41x53x54」 ->
ASCII を文字関数 chr() に変換する
文字を ASCII 関数 ord() に変換する
#二重引用符エスケープリスト
n 改行
r 入力
t 水平タブ文字
\ バックスラッシュ
$ドルマーク
v 垂直タブ
エスケープ
f ページ変更
「二重引用符」
[0-7]{1,3} は、この正規表現シーケンスに一致し、8 進表記で表現された文字です。
x[0-9A-Fa-f]{1,2} は、この正規表現シーケンスと一致し、16 進形式で表現された文字です



/* 区切り文字 */
herodoc - 二重引用符と同じように機能し、解析可能
$str = " 。
    $fun と $fun();
  };
}

$x = "こんにちは";
$test = closeCreater();
$test();
$test(function(){ echo "クロージャ テスト 1"; });
$test(function(){ echo "クロージャ テスト 2"; });
$test(function() use($x){ echo "<br>".$x;});

//関数を配列要素として保存
$x = '外部パラメータ';
$arr = 配列();
$arr[] = function($str)use($x){ return $str.$x };
echo $arr[0]('arr で楽しみをテスト,');


/* [配列] */
連想配列: キーと値が関連付けられており、キーは値の論理的な意味を表します。
インデックス配列: キーと値は関連しておらず、キーは値の位置を表します。通常、添字は 0 から始まり、要素ごとに増分されます。
count($var [,$mode]) //配列の要素数をカウントする
  $mode はオプションです。1 または true に設定すると、再帰的な統計が実行されます。
  $var が配列ではない場合は 1 を返します。$var が初期化されていないか、null または空の配列に等しい場合は 0 を返します。

//キー名の使用
整数値キーは引用符で囲む必要はありません ($arr[1])
文字列の数値キーは引用符で囲む必要はありません ($arr = array('1'=>'abc'); $arr[1])
連想配列、文字列キーは引用符で囲む必要があります ($arr = array('a'=>'aaa'); $arr['a'])
連想配列、二重引用符で囲まれた変数を解析します。引用符は必要ありません ($arr = array('a'=>'aaa'); "$arr[a]")

/* [ポインタ] */
current/pos は、ポインタを移動せずに、内部ポインタが現在指している配列要素の値を返します。
key は、ポインタを移動せずに、配列内の現在のセルのキー名を返します。
next は、配列内の内部ポインタを 1 つ前に移動し、移動後の現在のセルの値を返します。最初に移動してから値を取得します。
prev は、配列の内部ポインタを 1 ビット巻き戻し、移動後の現在のセルの値を返します。
end は、配列の内部ポインタを最後の要素にポイントし、最後の要素の値を返します。
リセットは、配列の内部ポインタを最初の要素にポイントし、最初の配列要素の値を返します。

それぞれ、配列内の現在のキーと値のペアを返し、配列ポインターを 1 ステップ進めます。
      返されるのは、キーと値で構成される長さ 4 の配列です。添字 0 とキーはキーを表し、添字 1 と値は値を表します。
        each() を実行した後、配列ポインタは配列内の次のセルに留まります。
          または、配列の終わりに達したときに最後のセルに留まります。
          each を使用して配列を再度反復処理する場合は、reset() を使用する必要があります。

  1. key() を除く上記のポインタ操作関数は、ポインタが配列の外に移動されると false を返します。 key() が外部に移動されると、null が返されます。
  2. ポインタが不正な場合、次へ/前への操作は実行できませんが、リセット/終了操作は実行できます。
  3. current/next/prev は、空のユニット (0 または "") に遭遇した場合にも false を返します。しかし、それぞれはそうではありません!

list は、配列内の値をいくつかの変数に割り当てます。 list() は関数ではなく言語構造です
      数値インデックス付きの配列でのみ使用でき、数値インデックスは 0 から始まると想定されます。
      /* 複数の変数の値を交換するために使用できます */ list($a, $b) = array($b, $a);
  例: list($ Drink, , $power) = array('coffee', 'brown', 'caffeine');

1. 配列がコピーされると、そのポインターの位置もコピーされます。
  特殊なケース: 配列ポインタが不正な場合、コピーされた配列ポインタはリセットされますが、元の配列ポインタは変更されません。【ポインタの問題】
    最初に書いた人が新しい価値空間を切り開くでしょう。変数(配列変数)の値が誰に渡されるかは関係ありません。
    配列関数 current() は書き込み操作として定義されているため、問題が発生します。
    foreach が走査するのは配列のコピーであり、それが書き込まれると、新しい値空間が開かれます。
      つまり、ポインターの問題は、foreach ループ本体が元の配列に書き込む場合にのみ発生します。
      新しいスペースを開くときにポインタが不正な場合、ポインタは初期化されます。
2. ポインタの位置に問題がある場合は、reset() で初期化することで問題を解決できます。


/* [配列を走査する] */
* 最初に要素を検索し、次にキーと値を取得します

フォーリーチ
  foreach (array_expression as [$key =>] & $value)
   foreach の実行が開始されると、配列内のポインターは自動的に最初の要素を指します。
   要素情報を取得後、ポインタを移動してループ本体を実行します。
   1. foreach 自体のループ構造、break と continue が foreach に適している
   2. foreach は、ループの代替構文をサポートします。
   3. $value は要素の値を格納する変数であり、これを変更しても配列の要素の値は変更されません。
   4. $value は要素値の参照コピーをサポートしています。$value の前に & を追加するだけです
   5. $key は参照の受け渡しをサポートしていません
   6. foreach が走査するのは元の配列のコピーであり、ループ本体内の配列に対する操作は元の配列に対する操作です。
      つまり、配列に対するループ本体の操作は元の配列には影響しますが、トラバーサルには影響しません。
      まず走査のために配列をコピーします

その間...リスト...それぞれ
while (list($key, $val) = mysql_fetch_row($result)) = each($arr) {
 echo "$key => $valn";
}



/* [配列関数] */
//計算
count 配列内のセルの数またはオブジェクト内の属性の数をカウントします。
array_count_values は、配列内のすべての値の出現数をカウントします。
array_product は配列内のすべての値の積を計算します
array_sum は配列内のすべての値の合計を計算します
range は、指定された範囲内のセルを含む配列を作成します

//配列の内容を取得する
array_chunk は配列を複数に分割します
  array array_chunk(array $input, int $size[, bool $preserve_keys])
array_filter はコールバック関数を使用して配列内のセルをフィルタリングします
array_slice は配列からセグメントを取得します
  array array_slice($arr, $offset [,$len [,$preserve_keys]])
array_keys は配列内のすべてのキー名を返します
  array array_keys(array $input[,mixed $search_value[, bool $strict]] )
  オプションのパラメータ search_value が指定されている場合、値のキー名のみが返されます。それ以外の場合は、入力配列内のすべてのキーが返されます。
array_values は、数値インデックス付きの配列内のすべての値を返します

array_merge は 1 つ以上の配列をマージします
  1 つの配列の値が前の配列に追加されます。
  入力配列に同じ文字列キー名がある場合、キー名の後の値で前の値が上書きされます。
  配列に数値キー名が含まれている場合、後続の値は元の値を上書きせず、それらの値に追加されます。
  配列のみが指定され、その配列が数値的にインデックス付けされている場合、キー名は連続して再インデックス付けされます。 
array_merge_recursive は 1 つ以上の配列を再帰的にマージします

//検索
in_array は配列内に値が存在するかどうかをチェックします
  bool in_array(mixed $needle, array $haystack[, bool $strict])
array_key_exists は、指定されたキー名またはインデックスが配列内に存在するかどうかを確認します。
  isset() は配列内の NULL 値に対して TRUE を返しませんが、array_key_exists() は TRUE を返します。
array_search は、指定された値の配列を検索し、成功した場合は対応するキーを返します。

array_combine は、1 つの配列の値をキーとして使用し、別の配列の値を値として使用して配列を作成します。
  2 つの配列の要素の数が異なる場合、または配列が空の場合は FALSE を返します。
array_rand は、配列から 1 つ以上のユニットをランダムに取得し、キー名またはキー名で構成される配列を返します。添字は自然にソートされます。
array_fill は、指定された値で配列を埋めます。
  array_fill($start, $num, $value)
array_flip は配列内のキーと値を交換します
array_pad は、指定された長さまで配列に値を埋め込みます。
array_reverse は、セルを逆順にした配列を返します
array_unique は配列から重複した値を削除します
array_splice は配列の一部を削除し、他の値に置き換えます。

implodeは、特定の文字列を使用して配列要素の値を文字列に連結します。
explode($delimiter, $str [,$limit]) //ある文字列を使用して別の文字列を分割します
  $delimiter を空の文字列 "" にすることはできません

array_map は、指定された配列の単位にコールバック関数を適用します。要素の値のみを処理でき、複数の配列を処理できます。
  コールバック パラメーターが null に設定されている場合、複数の配列が 1 つの多次元配列にマージされます。
array_walk は配列内の各メンバーにユーザー関数を適用します。キーと値の両方を処理できます。foreach と同じ機能があります。
  bool array_walk ( array &$array , コールバック $funcname [,mixed $userdata ] )

//スタック: 後入れ先出し
スタックをプッシュおよびポップすると、インデックスの添字が再割り当てされます。
array_push は、1 つ以上の要素を配列の末尾にプッシュします (プッシュ)
array_pop は配列の最後のユニットをポップします (スタックをポップします)。この関数を使用すると、配列ポインタがリセットされます (reset())。

//キュー: 先入れ先出し
キュー関数によるインデックス添字の再割り当て
array_unshift は、配列の先頭に 1 つ以上のセルを挿入します。
array_shift は、配列の先頭の要素を配列の外に移動します。この関数を使用すると、配列ポインタがリセット (reset()) されます。//ソート関数
sort 配列をソートする
rsort 配列を逆順にソートします
asort は配列をソートし、インデックス関係を維持します
arsort は配列を逆順にソートし、インデックス関係を維持します。
ksort は配列をキーでソートします
krsort は配列をキー名によって逆順にソートします
usort は、ユーザー定義の比較関数を使用して配列内の値を並べ替えます
uksort は、ユーザー定義の比較関数を使用して配列内のキーをソートします。
uasort は、ユーザー定義の比較関数を使用して配列内の値を並べ替え、インデックスの関連付けを維持します。
natsort は「自然ソート」アルゴリズムを使用して配列をソートします
natcasesort は、「ナチュラルソート」アルゴリズムを使用して、大文字と小文字を区別しない方法で配列をソートします。
array_multisort 複数の配列または多次元配列をソートします
shuffle 配列をシャッフルする
  パラメーターを参照によって渡し、ブール値を返します。
  インデックスキー名を再割り当てし、元のキー名を削除します

//差分セット
array_udiff_assoc は、インデックス チェックを使用して配列の差分セットを計算し、コールバック関数を使用してデータを比較します。
array_udiff_uassoc は、インデックス チェックを使用して配列の差分セットを計算し、コールバック関数を使用してデータとインデックスを比較します。
array_udiff はコールバック関数を使用してデータを比較し、配列の差分を計算します。
array_diff_assoc は、インデックスチェックを使用して配列の差分を計算します。
array_diff_key は、キー名の比較を使用して配列の差分を計算します。
array_diff_uassoc は、インデックス チェックを実行するユーザー指定のコールバック関数を使用して配列の差分を計算します。
array_diff_ukey は、コールバック関数を使用してキー名を比較し、配列の差分セットを計算します。
array_diff は配列の差分を計算します
//交差点
array_intersect_assoc は、インデックスをチェックして配列の交差を計算します。
array_intersect_key は、キー名の比較を使用して配列の共通部分を計算します。
array_intersect_uassoc は、インデックスをチェックして配列の交差を計算し、コールバック関数を使用してインデックスを比較します。
array_intersect_ukey は、コールバック関数を使用してキー名を比較し、配列の交差部分を計算します。
array_intersect は配列の交差を計算します
array_key_exists は、コールバック関数を使用してキー名を比較し、配列の共通部分を計算します。
array_uintersect_assoc は、インデックスチェックを使用して配列の交差を計算し、コールバック関数を使用してデータを比較します。
array_uintersect は配列の共通部分を計算し、コールバック関数を使用してデータを比較します

extract($arr [,$type [,$prefix]]) は、配列から現​​在のシンボル テーブルに変数をインポートします (結合された配列 $arr をパラメーターとして受け入れ、キー名を変数名として使用し、値を変数として使用します)価値)
Compact($var [,...]) は、変数名とその値を含む配列を作成します (変数名がキーになり、変数の内容がキーの値になります)




/* [疑似タイプ] */
「mixed」は、パラメーターが複数の (ただし、すべてではない) 異なる型を受け入れることができることを示します。
数値は、パラメータが整数または浮動小数点数であることを示します。
callback コールバック関数
戻り値の型として void void は、関数の戻り値が役に立たないことを意味します。
      パラメータリストとしての void は、関数がパラメータを受け入れないことを意味します。


/* [データベース操作] */
#接続認証
mysql_connect はデータベースに接続して認証します
#SQL文の送信と実行結果の受信
mysql_query は SQL ステートメントを送信します
    select、show、explain、describe ステートメントが正常に実行された場合はリソース識別子のみが返され、他のステートメントが正常に実行された場合は true が返されます。実行が失敗した場合は false を返します。
#処理結果
mysql_fetch_assoc は結果セットから行を連想配列としてフェッチします
    それぞれのアイテムと同様に、一度に 1 つのアイテムのみが取得されます。
  結果セットレコードポインタ
mysql_fetch_row は結果セットから行を列挙配列としてフェッチします
mysql_fetch_array は結果セットから行を連想配列、数値配列、またはその両方としてフェッチします。
  array mysql_fetch_array ( resource $result [, int $result_type ] )
  オプションのパラメータ result_type のオプション値は次のとおりです: MYSQL_ASSOC、MYSQL_NUM、および MYSQL_BOTH (デフォルト)
mysql_free_result は結果メモリを解放します
#リンクを閉じる
mysql_close は接続を閉じます


/* [クラスとオブジェクト] */
# メンバー:
  クラスメンバー: クラス定数、静的プロパティ、静的メソッド
  オブジェクトメンバー: 非静的プロパティ、非静的メソッド
  # クラスにはそれ以外のものを含めることはできません。 ! !

# クラス名、メソッド名、属性名は大文字と小文字が区別されません
# $this はこのオブジェクトを表し、self はこのクラスを表し、parent は親クラスを表します
# クラスと関数の両方を事前にコンパイルすることができます (最外層としてのみ)
# クラスの定義は単一の PHP ブロック内にある必要があり、複数の PHP タグで分割することはできません

// 構築方法
- コンストラクターを持つクラスは、新しいオブジェクトが作成されるたびに最初にこのメソッドを呼び出します。
void __construct([ 混合 $args [, $... ]] )
- コンストラクタに必要なパラメータをnewでインスタンス化する場合、クラスにパラメータ値を追加します。
- コンストラクターは手動で呼び出すこともできます。
- バージョン 5.3.3 より前では、クラス名と同じ名前のメソッドがコンストラクターとしてサポートされていました。
- 2 つが競合する場合、__construct が優先されます。

// 破壊方法
- デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。
void __destruct(void)
# 機能: オブジェクトが占有しているリソースを解放します。
# 電話をかけるタイミング
  - オブジェクトを含むすべてのリソースはスクリプトの終了時に解放されます。
  ・ オブジェクトを手動で削除する場合
  - オブジェクトを保持する変数に新しい値(nullを含む任意の値)が代入された場合
  - exit() を使用してスクリプトを終了するときにも呼び出されます。

// 静的メンバー (静的キーワード)
  - クラスのメンバーまたはメソッドを static として宣言すると、クラスをインスタンス化せずに直接アクセスできます。
  - 静的メンバー (プロパティまたはメソッド) はクラスに属しているため、$this または -> を介してアクセスすることはできません。- 静的メンバーはすべてのオブジェクトで共有され、クラスに属します。
  - 静的メンバーはクラスで呼び出され、非静的メンバーはオブジェクトで呼び出されます。
# 静的プロパティ
  - 静的プロパティには、-> 演算子を使用してオブジェクトからアクセスできません。
  - 静的プロパティは文字値または定数にのみ初期化でき、式は使用できません。 したがって、静的プロパティを整数または配列に初期化することはできますが、別の変数や関数の戻り値、またはオブジェクトを指すことはできません。
# 静的メソッド
  - 静的メソッドではオブジェクトを呼び出す必要がないため、疑似変数 $this は静的メソッドでは使用できません。
  - ::メソッドを使用して非静的メソッドを呼び出すと、E_STRICTレベルのエラーが発生します。

// アクセス解析演算子 (::)
  - 静的メンバー、メソッド、定数にアクセスするために使用でき、クラス内のメンバーやメソッドをオーバーライドするためにも使用できます。 
  - これらの静的メンバー、メソッド、および定数にクラスの外部からアクセスする場合は、クラス名を使用する必要があります。 
  - 2 つの特別なキーワード self とparent は、クラス内のメンバーまたはメソッドにアクセスするために使用されます。

//アクセス解析
- オブジェクトのメンバーは、内部的には $this によって指定され、外部的にはオブジェクト名によって指定されます。両方とも、プロパティにアクセスするときに $ を追加する必要はありません。
  オブジェクト名->プロパティ名 オブジェクト名->メソッド名() $this->プロパティ名 $this->メソッド名()
- クラスのメンバーは、内部的には self またはparentを介して指定され、外部的にはクラス名を介して指定されます。これらはすべて :: を使用してアクセスされ、属性にアクセスする場合は $ が必要です。
  クラス名::$属性名 クラス名::メソッド名() self::$属性名 self::メソッド名()
- 特殊: クラス メンバーには、オブジェクトを通じてアクセスすることもできます。 (推奨されません)
  オブジェクト名::$class 属性名 $this::$class 属性名 オブジェクト名::$class メソッド名() $this::class メソッド名()
# オブジェクト メンバーにアクセスするには -> を使用し、クラス メンバーにアクセスするには::

- 静的か非静的かにかかわらず、クラスまたはオブジェクトを通じてメソッドにアクセスできます。
- 静的プロパティにはクラスを通じてアクセスし、静的メソッドにはオブジェクトを通じてアクセスします。
- $this は、オブジェクトを使用して非静的メソッドを呼び出す場合にのみ使用できます。
- 静的メソッドでは $this を使用できません。
- クラスはオブジェクト メソッドを呼び出すことができますが、メソッド内に $this を含めることはできないことに注意してください。
- 非静的メソッドは静的プロパティまたは静的メソッドを呼び出すことができますが、その逆はできません。

// クラス定数
- 定数の値は常に同じままです。
- 定数を定義および使用するときに $ 記号を使用する必要はありません。
- 定数の値は固定値である必要があり、変数、クラス属性、またはその他の操作 (関数呼び出しなど) の結果であってはなりません。
# 定義: const 定数名 = 定数値;
- public などのアクセス変更修飾子を追加する必要はありません
- クラス定数はクラスに属し、クラス名::クラス定数またはself::クラス定数を使用してアクセスされます。

// オブジェクトを自動的にロードします
- まだ定義されていないクラスを使用しようとすると、__autoload関数が自動的に呼び出されます。
- 使用されているクラス名ファイルを自動的にロードします (クラス名に基づいて対応する名前のファイルを検索します。そのため、クラス名はクラス ファイル名と一致している必要があります)
- クラスをロードする必要があるすべてのファイルには __autoload 関数が必要です
- __autoload 関数を別のファイルに記述し、クラスを使用する必要があるファイルごとに関数ファイルを要求します。
- __autoload パラメータはクラス名です
関数 __autoload($class_name) {
  require_once $_SERVER["DOCUMENT_ROOT"] "/class/$class_name.php";
}
  // $_SERVER["DOCUMENT_ROOT"] 現在実行中のスクリプトが配置されているドキュメント ルート ディレクトリ
- クラス名を使用して、そのクラスが配置されているファイル名を推測できます。
・ プロジェクト内にオートロード関数が複数ある場合は、ロードを完了できる共通の関数を定義し、spl_autoload_registerを使用してその関数の前に登録してください。
# spl_autoload_register
- __autoload() 関数を登録する
bool spl_autoload_register ([コールバック $autoload_function ] )
・自動ロード機能は複数登録でき、最初に登録したものが先に実行されます。
・ オートロード機能を登録すると、__autoloadは無効になります。
- 関数を登録する場合、パラメータは関数名です (引用符に注意してください)。メソッドを登録する場合、パラメータは配列です。
# クラスまたはオブジェクトを登録するメソッドが自動ロード メソッドである場合、パラメータは配列である必要があります。
spl_autoload_register(array(__CLASS__, '__autoload'));
__CLASS__ は現在のクラス名を表します。$this がオブジェクトで使用できる場合は、詳細についてはマニュアルを参照してください。

// シリアル化 (シリアル化)
# データ送信は全て文字列型
# リソースタイプを除き、すべてシリアル化可能
# シリアル化でデータを保存すると、データそのものとデータ型が保存されます。
機能: 1. ネットワーク経由でデータを送信するとき。 2. ディスク上に配列またはオブジェクトを配置するとき。
# 連載
シリアライズは値の保存可能な表現を生成します
文字列シリアル化 (混合 $value)
- 値を表すバイト ストリームを含む文字列を返し、どこにでも保存できます。
- 型や構造を失うことなく、PHP での値の保存または受け渡しが容易になります。
# デシリアライズ
unserialize は保存された表現から PHP 値を作成します
混合アンシリアル化 ( string $str [, string $callback ] )
- 単一のシリアル化された変数を操作し、それを PHP 値に変換し直します。


# ファイルの読み取りおよび書き込み操作
- file_put_contents は文字列をファイルに書き込みます
int file_put_contents($file, $data [,$flags])
  $flags: FILE_USE_INCLUDE_PATH (上書き)、FILE_APPEND (追加)
- file_get_contents はファイル全体を文字列に読み取ります
string file_get_contents($file [, bool $use_include_path [,int $offset [,int $maxlen]]])

#オブジェクトのシリアル化
- オブジェクト内のデータ、つまり非静的プロパティのみをシリアル化できます。# オブジェクトを逆シリアル化する前にクラスをロードする必要があり、自動ロード メカニズムをトリガーすることもできます。

__sleep はシリアル化するプロパティをシリアル化します。
    - コミットされていないデータ、または同様のクリーンアップ操作をコミットして、オブジェクトを部分的にシリアル化します。
    - シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返します。
__wakeup デシリアライズの際、オブジェクトが必要とするリソースを事前に準備する
    - データベース接続を再確立するか、その他の初期化操作を実行します。
  パブリック関数 __sleep() {
    return array('サーバー', 'ユーザー名', 'パスワード', 'db');
  }
  パブリック関数 __wakeup() {
    $this->connect();
  }

//オブジェクトの継承
クラスのサブクラス名は親クラス {} を拡張します
オブジェクトがサブクラスのオブジェクトである場合、それは親クラスのオブジェクトでもあります。
単一継承: クラスは 1 つの親クラスのみを継承でき、同時に複数のクラスを継承できません。ただし、親クラスは複数のサブクラスに継承できます。

instanceof は、オブジェクトが特定のタイプのオブジェクトであるかどうかを判断します
  オブジェクト名 クラス名のインスタンス

// アクセス制御
public public (継承チェーン、このクラス、および外部からアクセス可能)
protected protected (継承チェーンのみ、このクラスはアクセス可能)
private private (このクラスのみアクセス可能)
メンバ定義箇所とアクセス箇所により判断します。
# 互換性の問題
- 属性を宣言する場合、var キーワードはデフォルトでパブリック権限を宣言します。
- メソッドを宣言するときは、アクセス修飾子を省略し、デフォルトで public 権限を使用します。

// オーバーライド
$this はこのオブジェクトを表し、それを呼び出す人はそのオブジェクトを表します。
- 継承時に、サブクラスのメンバー名が親クラスのメンバー名と競合する場合、サブクラスのメンバーが親クラスのメンバーを上書きします。
- プロパティとメソッドはどちらもサブクラスによってオーバーライドできます。
- 親クラスのメソッドまたは属性がサブクラスのニーズを満たさなくなった場合、それらを書き直す必要があります。
・変則命名のため書き直す場合もあります。

プライベート プロパティはオーバーライドできず、各プライベート プロパティはログに記録されます。属性名を記録するときに、クラスも記録されます。

組み込み関数がオーバーライドされると、親クラスのメソッドを呼び出すことができます。たとえば、親クラスのコンストラクターparent::__construct()を呼び出します。

# 書き換え制限
訪問制限:
  サブクラスのメンバーのアクセス制御は、親クラスのアクセス制御と同等か、それより弱くなければなりません。
メソッドパラメータの制限:
  パラメータの数は同じである必要がありますが、パラメータ名は異なっていてもかまいません。

# $これにより原則が決まります
$this はメソッドを呼び出すオブジェクトであり、メソッドの実行環境オブジェクトを表します。
  - オブジェクト呼び出し
  -環境の伝達。 $this の値が現在の呼び出し (静的呼び出し) 中に決定できない場合、静的呼び出しのオブジェクト環境が呼び出されたメソッドに渡されます。
$this は常にこのオブジェクトを表すわけではなく、メソッドの実行環境によって決まります。

# 最後の
親クラスのメソッドがfinal宣言されている場合、子クラスはそのメソッドをオーバーライド(オーバーライド)できません。
クラスがfinalと宣言されている場合、そのクラスを継承することはできません。
ただし、final キーワードを含むクラスもインスタンス化できます。
#抽象クラス
キーワード: 抽象
抽象クラスを直接インスタンス化することはできません。最初に抽象クラスを継承してから、サブクラスをインスタンス化する必要があります。
抽象クラスには、少なくとも 1 つの抽象メソッドが含まれている必要があります。非抽象クラスには抽象メソッドを含めることはできません。
クラス メソッドが抽象として宣言されている場合、具体的な関数実装を含めることはできません。抽象メソッドには中括弧やメソッド本体を含めることはできません。
抽象クラスを継承する場合、サブクラスは抽象クラス内のすべての抽象メソッドを実装する必要があります。
  つまり、サブクラスは、抽象親クラス内のすべての抽象メソッドをオーバーライドする必要があります。
さらに、これらのメソッドの可視性は、抽象クラスと同じ (またはより緩やか) でなければなりません。
  つまり、抽象クラス内の抽象メソッドが保護されていると宣言されている場合、サブクラスに実装されているメソッドは保護またはパブリックとして宣言する必要があり、プライベートとして定義することはできません。
・ 抽象クラスのサブクラス内の通常メソッドは、他のクラスと同様に実行されます。
- 関数:
  1. 継承は、パブリック操作を統合する拡張クラスです。
  2. 制限構造(規範)。サブクラスの構造を標準化します。

//インターフェース
キーワード: インターフェース
- オブジェクトがオブジェクトと対話するために提供する方法はインターフェイスです。
- インターフェイスを使用して、クラスが実装する必要があるメソッドを指定できますが、これらのメソッドの特定の内容を定義する必要はありません。
- インターフェースを介してインターフェースを定義することは標準クラスを定義することと同じですが、その中で定義されているメソッドはすべて空です。 
- インターフェイスで定義されるすべてのプロパティとメソッドは public である必要があり、public キーワードは省略できます。
・ インターフェース内でも定数(const)を定義できます。インターフェイス定数とクラス定数はまったく同じように使用されます。
  :: を使用してアクセスできます。インターフェース名::定数名、実装クラス::定数名。
  これらはすべて固定値であり、サブクラスまたはサブインターフェイスで使用できますが、変更することはできません。
- インターフェイスではプロパティを定義できません。
# インターフェースを定義する
インターフェイス インターフェイス名 {
  インターフェイスのコンテンツ (パブリック メソッド宣言のコレクション)
}
# インターフェースの実装
- インターフェイスを実装するには、implements 演算子を使用できます。
- クラスは、インターフェイスで定義されたすべてのメソッドを実装する必要があります。実装しない場合は、致命的なエラーが報告されます。
- 複数のインターフェースを実装する場合は、カンマを使用して複数のインターフェースの名前を区切ることができます。
・ 複数のインターフェースを実装する場合、インターフェース内のメソッドに同じ名前を付けることはできません。
- extends 演算子を使用してインターフェイスを継承することもできます。
class クラス名はインターフェイス名を実装します {
  インターフェースメソッドの実装
}
# 知らせ
  1. クラスと抽象クラスの間には継承関係があり、クラスとインターフェースの間には実装関係があります。
  2. クラスと抽象クラスは単一の継承を持ちますが、クラスとインターフェイスは複数の実装を持ちます。
  3. インターフェイスはクラスではなく、クラスの構造を制限します。
  4. インターフェース間には多重継承があります。extends キーワードを使用します。
    インターフェイス I_C は I_A、I_B を拡張します {}

// 静的な遅延バインディング
self::、このクラス (現在のコードが配置されているクラス) を表します。
  クラスがコンパイルされるときに決定されるため、常にこのクラスを表します。
  つまり、サブクラスが親クラスのメソッドを呼び出すとき、self は呼び出し側のサブクラスを表しません。
static::, このクラス (このメソッドを呼び出すクラス) を表します
  継承スコープ内で静的に呼び出されるクラスを参照するために使用されます。
  表現されるクラスは実行時にのみ決定されます。
  static:: は、現在のメソッドが定義されているクラスに解決されなくなりましたが、実際の実行時に計算されます。

// オブジェクトのトラバーサル (反復)
- オブジェクトは属性を通じてデータを保存するため、オブジェクトの属性がトラバースされます。
- 言語構造ごとに、属性名と属性値を取得します。
  foreach ($obj as $p_name => $p_value) {}
# カスタムトラバーサル (イテレータ)
Iterator - 内部的に独自の反復処理を実行できる外部イテレータまたはクラスのインターフェイス
Iterator::current — 現在の要素を返す
Iterator::key — 現在の要素のキーを返す
Iterator::next — 次の要素に進みます
Iterator::rewind — イテレータの最初の要素に戻る
Iterator::valid — 現在の位置が有効かどうかを確認する

#オブジェクトのクローン
//オブジェクト間の値の転送は[参照]転送です。
クローン: 新しいオブジェクト = 古いオブジェクトのクローンを作成します
  - すべての参照プロパティは、引き続き元の変数への参照になります。 
__clone() メソッドは、オブジェクトのクローン作成時に自動的に呼び出されます。
注: 構築方法はインスタンス化(新規)、クローン方法はクローン(クローン)に相当します。

// シングルトンモード
#三プライベート一パブリック
シングルトン パターンは、クラスに固有のオブジェクトを生成するために使用されます。最も一般的に使用される場所はデータベース接続です。シングルトン パターンを使用してオブジェクトを生成した後、そのオブジェクトは他の多くのオブジェクトで使用できます。
# クラスが複数回インスタンス化されないようにする
クラスMySQLDB {
  private static $instance = null // クラスのインスタンスをこのプロパティに格納します。
  // オブジェクトの直接作成を防ぐために、コンストラクターはプライベートとして宣言されます。
  プライベート関数 __construct() {}
  パブリック静的関数 getInstance() {
    if(! self::$instance 静的インスタンス) {
      self::$instance = 新しい静的;
    }
    self::$instance を返します。
  }
  private function __clone() {} // ユーザーがオブジェクト インスタンスをコピーできないようにします
}

// マジックメソッド
__construct コンストラクター
__destruct デストラクター メソッド
__clone クローン オブジェクト
__sleep シリアル化されたオブジェクト
__wakeup はオブジェクトを逆シリアル化します
__autoload は、クラスが使用されているが見つからない場合に自動的にロードします。

__toString オブジェクトは文字列として使用されます
オブジェクトを関数として呼び出そうとする場合は __invoke

# オーバーロードオーバーロード
クラスのプロパティとメソッドを動的に「作成」することを指します。
ユーザーはオブジェクトに追加のプロパティを自由に追加できます。この機能はオーバーロードです。
オーバーロードされたメソッドはすべて public に宣言する必要があります。
オーバーロードされたメソッドは、現在の環境で未定義または非表示のクラス プロパティまたはメソッドが呼び出されるときに呼び出されます。
オーバーロードされたマジック メソッドのパラメータは参照渡しできません。
# 属性のオーバーロード
- アクセスできないプロパティを処理する
プロパティのオーバーロードはオブジェクト内でのみ実行できます。
#Property のオーバーロードは静的プロパティには無効です
静的メソッドでは、これらのマジック メソッドは呼び出されません。したがって、これらのメソッドを静的に宣言することはできません。
アクセスできないプロパティに値を割り当てる場合の __set
  public void __set(string $name,mixed $value)
  機能:プライベート属性の一括管理、オブジェクト構造の間接保護
アクセスできないプロパティの値を読み取る場合の __get
  publicmixed__get(string$name)
アクセスできないプロパティに対して isset() または empty() が呼び出された場合の __isset
  public bool __isset(string $name)
アクセスできないプロパティに対して unset() が呼び出された場合の __unset
  public void __unset(string $name)
# メソッドのオーバーロード
- アクセスできないメソッドを処理する
__call は、アクセスできない非静的メソッド (未定義または非表示など) を呼び出すときに自動的に呼び出されます。
    public mixed __call(string $name, array $arguments)
__callStatic は、アクセスできない静的メソッド (未定義または非表示など) を呼び出すときに自動的に呼び出されます。
    public staticmixed__callStatic(string $name, array $arguments)
# $name パラメータは、呼び出されるメソッドの名前です。 $arguments パラメーターは、メソッドに渡されるパラメーターを含む配列です。

//型制約
関数パラメータはオブジェクトまたは配列としてのみ指定できます
オブジェクトに限定される場合は、仮パラメータの前にクラス名を追加します。配列に限定される場合は、仮パラメータの前に配列を追加します。
型制約では NULL 値が許可されます
型制約はクラス メンバー メソッドで使用されるだけでなく、関数でも使用できます。 

//3つの大きな特徴
カプセル化: 内部を隠すことは吸収であり、インターフェイスのみを開発します。
継承: あるオブジェクトのメンバーは別のオブジェクトによって使用されます。構文はコードの共有に反映されます。
ポリモーフィズム: 複数の形式。// クラスとオブジェクト・キーワード
これはこのオブジェクトを表します
public public (継承チェーン、このクラス、および外部からアクセス可能)
protected protected (継承チェーンのみ、このクラスはアクセス可能)
private private (このクラスのみアクセス可能)
parent:: は親クラスを表します
self:: このクラス (現在のコードが配置されているクラス) を表します。
static:: このクラス (このメソッドを呼び出すクラス) を表します。
static 静的メンバー (プロパティ、メソッド) はすべてのオブジェクトで使用できますが、静的メソッドは非静的メンバーにアクセスすることはできません。
最終メソッドをサブクラスでオーバーロードすることはできず、クラスを継承することはできません (メソッド、クラス)
constクラス定数(プロパティ)
抽象抽象クラス
インターフェースインターフェース
クラス継承を拡張します(サブインターフェース継承インターフェース、その他の通常のクラス継承)
インターフェイスの実装 (クラス実装インターフェイス、抽象クラス実装の言い訳) (インターフェイスの実装と継承は複数存在する可能性があります)
Iterator 組み込みインターフェース (反復)
クローン クローン
インスタンス インスタンス
オブジェクトが特定のクラスに属しているかどうかのインスタンス

/* [クラスとオブジェクト関連の関数] */
class_alias([$original [,$alias]]) はクラスにエイリアスを与えます
class_exists($class [,$autoload]) は、クラスが定義されているかどうかを確認します
interface_exists($interface [,$autoload]) は、インターフェイスが定義されているかどうかを確認します
Method_exists($obj, $method) は、クラスのメソッドが存在するかどうかを確認します。
property_exists($class, $property) は、オブジェクトまたはクラスにプロパティがあるかどうかを確認します。
get_declared_classes(void) は、定義されたクラスの名前で構成される配列を返します。
get_declared_interfaces(void) は、宣言されたすべてのインターフェイスを含む配列を返します。
get_class([$obj]) はオブジェクトのクラス名を返します
get_parent_class([$obj]) は、オブジェクトまたはクラスの親クラス名を返します。
get_class_methods($class) は、クラス メソッド名で構成される配列を返します。
get_object_vars($obj) は、オブジェクトのプロパティで構成される連想配列を返します。
get_class_vars($class) は、クラスのデフォルト属性で構成される配列を返します。
is_a($obj, $class) オブジェクトがこのクラスに属している場合、またはこのクラスがこのオブジェクトの親クラスである場合に TRUE を返します。
is_subclass_of($obj, $class) このオブジェクトがこのクラスのサブクラスの場合は TRUE を返します
get_object_vars($obj) は、オブジェクトのプロパティで構成される連想配列を返します。


//共通クラス
# PHP マニュアル -> 定義済みクラス
Closure クロージャ クラス、無名関数オブジェクトの最終クラス
stdClass 標準クラス。通常、コレクション データを保存するオブジェクト クラスに使用されます。
__PHP_Incomplete_Class は不完全なクラスであり、オブジェクトのみが存在し、クラスが見つからない場合、そのオブジェクトはそのクラスのオブジェクトとみなされます。
例外例外クラス
PDOデータオブジェクトクラス

//魔法の定数
__DIR__ ファイルが配置されているディレクトリ
__LINE__ ファイル内の現在の行番号
__FILE__ ファイルのフルパス(絶対パス)とファイル名

__CLASS__ クラスの名前
__METHOD__ クラス名とメソッド名を含むクラスのメソッド名
__FUNCTION__ 関数名。メソッド名を表すためにのみメソッド内で使用されます。

// 反映機構 反映
機能: 1. 構成情報の取得 2. エージェントの実行
ReflectionClass はクラスに関する情報をレポートします
ReflectionMethod はメソッドに関する情報をレポートします
ReflectionClass::出力クラス構造レポートをエクスポートする
# エージェントの実行
ReflectionFunction クラスのオブジェクトをインスタンス化する
  $f = new ReflectionFunction('func'); // func は関数 func($p);
  $f->invoke('param');


/* ページジャンプ */
// PHP
header('場所: URL')
header()実行後も以下のコードが実行され続けるため、文の後にdieを付けて終了する必要があります。
プロンプトを表示できません。直接ジャンプします
//JSメソッド
location.href = URL
// HTML
<meta http-equiv="Refresh" content="時刻を表す値; url=リダイレクト先の URI">

/* [クッキー] */
Cookie は、ユーザーを追跡および識別するためにリモート ブラウザーにデータを保存するメカニズムです。
Cookie は HTTP ヘッダーの一部であるため、header() 関数の制限と同様に、他の情報がブラウザに出力される前に setcookie() 関数を呼び出す必要があります。出力バッファ関数を使用すると、すべての Cookie またはその他の HTTP ヘッダーが必要に応じて設定されるまで、スクリプトの出力を遅らせることができます。

//追加
setcookie は Cookie 情報を追加します
setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]])
#注意: setcookie() 関数の前に出力はありません。 ob キャッシュがオンになっていない限り!
# パラメータの説明
$name - Cookie の識別名
  $_COOKIE['name'] を使用して name という名前の Cookie を無効にします。
$value - Cookie の値。数値または文字列を指定できます。この値はクライアント側に保存されるため、機密データの保存には使用しないでください。
  $name パラメータの値が 'name' であると仮定すると、$_COOKIE['name'] は $value を取得できます。
$expire - Cookie の有効期間 (Unix タイムスタンプ、秒)
  $expire パラメーターの値が time()+60*60*24*7 の場合、Cookie が 1 週間後に期限切れになるように設定できます。このパラメータが設定されていない場合、セッションの直後に期限切れになります。
$path - サーバー側の Cookie の指定されたパス。この値が設定されている場合、サーバー内の指定されたパスにある Web ページまたはプログラムのみが Cookie にアクセスできます。
  パラメータ値が「/」の場合、Cookie はドメイン全体で有効です。
  「/foo/」に設定すると、Cookie はドメイン内の /foo/ ディレクトリとそのサブディレクトリで有効になります。
  デフォルト値は、Cookie が設定されている現在のディレクトリとそのサブディレクトリです。
$domain - この Cookie が属するサーバーの URL 名を指定します。デフォルトは、この Cookie を作成したサーバーの URL です。
  abc.com などのドメイン名のすべてのサブドメインで Cookie を有効にする場合は、エントリを「.abc.com」に設定する必要があります。$secure - Cookie が安全な HTTPS 接続を通じてのみ送信されるかどうかを示す Cookie のセキュリティ識別定数。この値が設定されている場合、特定の状況下でのみクライアントとサーバー間で送信できることを意味します。
  true に設定すると、Cookie は安全な接続でのみ設定されます。デフォルト値は false です。

// 読む
- ブラウザがリクエストを行うと、現在のドメイン名にあるすべての Cookie 情報がサーバーに送信されます。
- クライアントから送信された Cookie は、$_COOKIE グローバル配列に自動的に保存されます。
- Cookie 変数に複数の値を設定する場合は、Cookie 名の後に [] 記号を追加する必要があります。つまり、複数のデータが配列の形式で同じ変数に保存されます。
  //$_COOKIE['user']['name'] に設定します。user[name] の名前には引用符が含まれていないことに注意してください。
  setcookie('ユーザー[名前]', 'ショッカー');
- $_COOKIE はインデックス配列にすることもできます

// 消去
方法 1: 値を空の文字列に設定する
  setcookie('ユーザー[名前]', '');
方法 2: 対象の Cookie を「期限切れ」ステータスに設定します。
  // Cookie の有効期間を期限切れに設定します。有効期間はブラウザの有効期間と同じで、ブラウザを閉じると削除されます。
  setcookie('usr[name]', '', time()-1);

# 知らせ:
1. Cookie は文字列データのみを保存できます
2. $_COOKIE は Cookie データを受信するためにのみ使用され、Cookie データの設定や管理には使用されません。
  $_COOKIE を操作しても Cookie データには影響しません。
  $_COOKIE は、リクエスト中にブラウザによって運ばれる Cookie データのみを保存します。
3. Cookie のライフサイクル:
  一時クッキー: ブラウザを閉じると削除されます
  永続的な Cookie: $expire パラメータは、有効期限を示すタイムスタンプです。
4. 有効なディレクトリ
  Cookie は指定されたディレクトリ内でのみ有効です。デフォルトは、現在のディレクトリとそのサブディレクトリです。
  サブディレクトリの Cookie は、その親ディレクトリまたは兄弟ディレクトリでは使用できません。
5. Cookie はドメイン名を識別します
  デフォルトでは、現在のドメイン名とそのサブドメイン名が有効です。
6. js の document.cookie を通じて取得され、型は文字列です
7. ブラウザには COOKIE の総数に制限はありませんが、ドメイン名ごとの COOKIE の数と各 COOKIE のサイズには制限があり、ブラウザごとに異なる制限があります。

/* 【セッション】 */
1. セッションメカニズムを開きます
  session_start()
  注: session_start() 関数の前に出力があってはなりません。 ob キャッシュがオンになっていない限り。
2. 稼働データ
  $_SESSION 配列を操作する
3. ブラウザは SessionID を保存します。このセッション ID は、デフォルトで現在のドメイン名のすべてのディレクトリおよびサブディレクトリに有効になります。つまり、Cookie のデフォルトのパス値は「/」に設定されます。
4. サーバーはセッションデータを保存します
  デフォルトの保存方法: 各セッションでセッション データ ファイルが生成されます。ファイル名は sess_plus SessionID です。
5. セッションは、リソースを除くあらゆる種類のデータを保存できます。
  データはシリアル化されてからファイルに保存されます。
6. $_SESSION の要素の添字は整数であってはなりません。
  要素の値のみがシリアル化されるためです。
  要素内の配列添字にはこの要件はありません。
7. ライフサイクル
  ブラウザはデフォルトで閉じられています
    ブラウザによって保存されたCookie変数SessionIDは一時的なものであるため、
    ただし、サーバー側のセッション データ ファイルは必ずしも消えるわけではありません (セッションのガベージ コレクション メカニズムが処理するまで待つ必要があります)。
  Cookie 内の PHPSESSID 変数のライフサイクルは延長できます。 (推奨されません)
  php.ini 設定 session.gc_maxlifetime
8. データの削除
  $_SESSION 変数は、スクリプトが終了すると消えます。セッションメカニズムがオンになると、$_SESSION 変数が作成されます。
  $_SESSION とセッションデータを保存するファイルは 2 つのスペースです。
  unset($_SESSION['key']) は配列内の要素を削除するだけであり、セッション データを保存するファイルにはすぐに応答しません。
    スクリプトが終了するまで待ってから、$_SESSION データがファイルに書き込まれます。
  session_destroy() は、セッション データを保存するファイルを破棄し、ファイルに内容を書き込みません。
    $_SESSION 変数は削除されず、設定が解除されるかスクリプトが終了するまで削除されません。
  セッションを完全に削除するにはどうすればよいですか? 3 つの部分を削除する必要があります
    unset($_SESSION);
      $_SESSION 変数を削除した後、データ ファイルは変更されていません。 unset を単独で使用する場合は、最初に $_SESSION = array() を空にする必要があります
    session_destroy();
    setcookie('PHPSESSID', '', time()-1); //保険契約はライフサイクルを無効にします。
  スクリプト サイクル全体で、データ ファイルの読み取りと書き込みは 1 回だけ行われます。

// セッションストレージメカニズムを書き換えます
#セッションの保存方法
session.save_handler = ユーザー|ファイル|memcache
# データファイルが多すぎることによって引き起こされる問題は、データファイルを分子ディレクトリに保存することで解決できます。
PHP 設定ファイルの session.save_path オプションを使用し、データ ストレージ ディレクトリを手動で作成する必要があります。
この構成オプションの前にレベルを追加します。サブディレクトリを分散する原則では、セッション ID の対応する文字を使用してサブディレクトリを割り当てます。サブディレクトリは依然として手動で作成する必要があります。
session.save_path = "2; F:/PHPJob/Temp"
#マルチサーバーのデータ共有の問題
#データストレージ操作:
  $open の初期化、リソースの解放 $close、読み取り $read、書き込み $write、ストレージ メディアの破棄 $destroy (この操作は session_destroy が呼び出されたときにトリガーされます)、ガベージ コレクション $gc
# セッション ID の長さは可変です。設定方法が異なると、セッション ID の長さも異なります。
session.hash_function を使用すると、ユーザーはセッション ID の生成に使用されるハッシュ アルゴリズムを指定できます。
  「0」は MD5 (128 ビット) を意味し、「1」は SHA-1 (160 ビット) を意味します。
session.hash_bits_per_character を使用すると、バイナリ ハッシュ データを読み取り可能な形式に変換するときに、1 文字あたり何ビットを保存するかをユーザーが定義できます。
  可能な値は、「4」 (0 ~ 9、a ~ f)、「5」 (0 ~ 9、a ~ v)、および「6」 (0 ~ 9、a ~ z、A ~ Z、「-」、「,」) です。ハッシュの合計長は 128 ビットで、セッション ID の長さは 128 / 可能な値、4 - > 32、5 - > 26、6 - > 22 です。
# カスタムデータの保存操作方法
# 注: PHP がどのようにシリアル化、逆シリアル化し、データを取得し、データを書き込むかについては気にせず、データ ストレージに関連する操作のみを行ってください。
session_set_save_handler はユーザー定義のセッション データ ストレージ関数を設定します
  bool session_set_save_handler(呼び出し可能な $open、呼び出し可能な $close、呼び出し可能な $read、呼び出し可能な $write、呼び出し可能な $destroy、呼び出し可能な $gc)
実行順序: オープン、クローズ、読み取り、書き込み、破棄、GC
# 最初にプロセッサを設定してからセッションを開きます

# よく使われる関数
session_start はセッションメカニズムを開始または再開します。
session_id は現在のセッション ID を取得または設定します
session_destroy は、現在のセッションのすべてのデータを破棄します (データ ファイルを破棄します)。
session_name は、現在のセッション名 (Cookie 変数名、デフォルトは PHPSESSID) を取得または設定します。
session_save_path は、現在のセッション データ ファイルの保存パスを取得または設定します
session_set_save_handler はユーザー定義のセッション データ ストレージ関数を設定します
session_unset はすべてのセッション変数を解放します ($_SESSION 配列要素をクリアします)。
session_encode は、現在のセッション データを文字列にエンコードします。
session_decode は文字列をセッション データに解釈します
session_write_close はセッション データを書き込み、セッションを閉じます
session_register_shutdown はセッションを閉じます
session_set_cookie_params はセッション Cookie 変数を設定し、session_start() の前に使用する必要があります。
  session_set_cookie_params(0,"/webapp/"); //セッションの生存時間を設定します。
session_get_cookie_params はセッション Cookie 変数を取得します。現在のセッションの Cookie 情報を含む配列を返します。

# php.iniの設定
ini_set($varname, $newvalue);
  //この関数の設定は現在のスクリプトに対してのみ有効です
  //すべての php.ini 設定がこの関数で設定できるわけではありません
ini_get($varname) //特定の構成項目に関する情報を取得します
ini_get_all([str $extension]) //すべての構成項目情報の配列を返します

# セッション拡張構成
session.name は、Cookie の名前として使用するセッション名を指定します。英数字のみで構成でき、デフォルトは PHPSESSID です。
session.save_path は、ストレージ ハンドラーに渡されるパラメーターを定義します。
  デフォルトのファイル ファイル プロセッサが選択されている場合、この値は作成されたファイルへのパスになります。デフォルトは /tmp です。
  オプションの N パラメータは、セッション ファイルが配布されるディレクトリの深さを決定します。
  N パラメータを使用するには、使用前にこれらのディレクトリを作成する必要があります。 ext/session ディレクトリには、これを行うために使用できる mod_files.sh という小さなシェル スクリプトがあります。
  N パラメーターが使用され、N が 0 より大きい場合、自動ガベージ コレクションは実行されません。
session.save_handler は、セッションに関連付けられたデータの保存と取得に使用されるハンドラーの名前を定義します。デフォルトはファイルです。
  ユーザーがメモリを定義した場合、値は user に変更されます。
  ini_set('session.save_handler', 'user');//この設定は現在のスクリプトに対してのみ有効です。
session.auto_start は、リクエストの開始時にセッション モジュールが自動的にセッションを開始するかどうかを指定します。デフォルトは 0 (開始しない) です。
session.gc_probability と session.gc_divisor は一緒に、各セッションの初期化時に gc (ガベージ コレクション ガベージ コレクション) プロセスを開始する確率を定義します。この確率は、gc_probability/gc_divisor を使用して計算されます。たとえば、1/100 は、各リクエストで gc プロセスが開始される確率が 1% であることを意味します。 session.gc_divisor のデフォルトは 100 です。 session.gc_probability のデフォルトは 1 です。/* [画像の生成と処理] */GD ライブラリ
// キャンバスの生成
# 新しいキャンバスを作成する
imagecreate は新しいパレットベースのイメージを作成します
  リソースイメージ作成(int $x_size, int $y_size)
imagecreatetruecolor は新しい True Color イメージを作成します
# 既存のファイルまたは URL に基づいてキャンバスを作成します
imagecreatefromgd2 GD2 ファイルまたは URL からイメージを作成します
imagecreatefromgd2part 指定された GD2 ファイルまたは URL の一部から画像を作成します
imagecreatefromgd は GD ファイルまたは URL から新しいイメージを作成します
imagecreatefromgif はファイルまたは URL から新しい画像を作成します
imagecreatefromjpeg はファイルまたは URL から新しい画像を作成します
imagecreatefrompng ファイルまたは URL から新しい画像を作成します
imagecreatefromstring は、文字列内の画像ストリームから画像を作成します
imagecreatefromwbmp ファイルまたは URL から新しい画像を作成します
imagecreatefromxbm はファイルまたは URL から新しい画像を作成します
imagecreatefromxpm はファイルまたは URL から新しい画像を作成します
// 色の割り当て
imagecolorallocate は画像に色を割り当てます
  int imagecolorallocate(resource $image, int $red, int $green, int $blue)
imagecolorallocatealpha は画像にカラー + アルファを割り当てます
imagecolordeallocate は、画像の色の割り当てをキャンセルします。
imagecolortransparent は色を透明として定義します
imagecolorat はピクセルのカラーインデックス値を取得します
imagecolorclosest 指定した色に最も近い色のインデックス値を取得します
imagecolorclosestalpha 指定した色に最も近い色と透明度を取得します
imagecolorclosesthwb 指定された色に最も近い白黒の色のインデックスを取得します
imagecolorexact は、指定された色のインデックス値を取得します
imagecolorexactalpha 指定された色と透明度のインデックス値を取得します
imagecolormatch は、画像内の色のパレット バージョンをトゥルー カラー バージョンにより近づけます。
imagecolorresolve 指定された色のインデックス値、または最も近い可能な置換値を取得します。
imagecolorresolvealpha 指定された色のインデックス値 + アルファ、または可能な限り最も近い代替値を取得します。
imagecolorset は、指定されたパレット インデックスの色を設定します。
imagecolorsforindex はインデックスの色を取得します
imagecolorstotal 画像のパレット内の色の数を取得します
// 領域の塗りつぶし
画像の塗りつぶし領域の塗りつぶし
  bool imagefill(resource $image, int $x, int $y, int $color)
imagefilledarc は楕円弧を描き、それを塗りつぶします
imagefilledellipse は楕円を描いて塗りつぶします
imagefilledpolygon は多角形を描画して塗りつぶします
imagefilledrectangle は長方形を描画して塗りつぶします
imagefilltoborder は、指定された色の境界線まで領域を塗りつぶします。
imagesettile は塗りつぶしに使用されるテクスチャを設定します
// グラフィック作成
imagearc は楕円弧を描きます
imagechar は文字を水平方向に描画します
imagecharup は文字を縦方向に描画します
imagedashedline 点線を引く
imageellipseは楕円を描きます
imageline は線分を描画します
imagepolygon は多角形を描画します
imagerectangle は長方形を描画します
imagesetpixel は単一のピクセルを描画します
imagex は画像の幅を取得します
imagey は画像の高さを取得します
//ブラシ設定
imagesetbrush は、線の描画に使用されるブラシ画像を設定します。
imagesetstyle は線画のスタイルを設定します
imageethickness は線画の幅を設定します
// グラフィックのコピー
imagecopy はイメージの一部をコピーします
imagecopymerge は画像の一部をコピーして結合します
imagecopymergegray 画像の一部をグレースケールでコピーして結合します
imagecopyresampled リサンプルは画像の一部をコピーし、サイズを変更します
imagecopyresize は画像の一部をコピーし、サイズを変更します
//キャラクター作成
imagestring は文字列の線を水平方向に描画します
imagestringup は文字列を垂直方向に描画します
imagepsslantfont フォントを傾けます
imagefontheight はフォントの高さを取得します
imagefontwidth はフォント幅を取得します
imagettfbbox TrueType フォントを使用してテキストの範囲を取得します
imageloadfont は新しいフォントをロードします
imagepsencodefont はフォント内の文字エンコード ベクトルを変更します
imagepsextendfont はフォントを拡大または縮小します
// キャンバスを画像としてエクスポート
imagegif 画像を GIF 形式でブラウザまたはファイルに出力します
imagepng 画像を PNG 形式でブラウザまたはファイルに出力します
imagejpeg 画像を JPEG 形式でブラウザまたはファイルに出力します
imagewbmp 画像を WBMP 形式でブラウザまたはファイルに出力します
header() を通じて「Content-type: image/image format」を送信すると、PHP スクリプトが画像を直接出力する可能性があります。header("コンテンツタイプ: image/gif");
imagegd GD イメージをブラウザまたはファイルに出力します
imagegd2 GD2 イメージをブラウザまたはファイルに出力します
// キャンバスリソースを解放する
画像を破壊する 画像を破壊する
//画像情報
image_type_to_extension は、画像タイプのファイル接尾辞を取得します
getimagesize は画像サイズを取得します
imagex は画像の幅を取得します
imagesy は画像の高さを取得します
imageistruecolor は、画像が True Color 画像であるかどうかを確認します。
imagetypes は、現在の PHP バージョンでサポートされているイメージ タイプを返します。
//画像設定
imagerotate は指定された角度で画像を回転します
imagealphablending は、画像のカラー ブレンド モードを設定します。
imageantialias アンチエイリアス(アンチエイリアス)機能を使用するかどうか
imagefilter は画像にフィルターを適用します
imagegammacorrect は GD 画像にガンマ補正を適用します
imageinterlace インターレースを有効または無効にする

/* [サムネイル] [ウォーターマーク] */
imagecopyresampled リサンプルは画像の一部をコピーし、サイズを変更します
  bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
imagecopymerge は画像の一部をコピーして結合します
  bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
getimagesize は画像サイズを取得します
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい