ホームページ  >  記事  >  バックエンド開発  >  2,000 行の PHP 学習ノート、2,000 行の学習ノート_PHP チュートリアル

2,000 行の PHP 学習ノート、2,000 行の学習ノート_PHP チュートリアル

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

2000 行の PHP 学習ノート、2000 行の学習ノート

親愛なる皆さん、約束どおり PHP ノートがここにあります~絶対に役立ちます!

以下は、私が PHP を学習していたときに取ったメモです。時々、基礎知識のポイントを追加し、時々確認します。

メモは PHP コード ファイルに入力されているため、色のハイライトがあります...

絶対にオリジナルです、転載大歓迎です、あなたのキャラクターに注目してください、ははは~

MySQL メモ: 1,000 行の MySQL 学習メモ
http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html

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


<span>/*</span><span> 【命名ルール】 </span><span>*/</span><span>
クラス定数の定数名はすべて大文字にすることをお勧めします。単語はアンダースコアで区切る必要があります </span><span>//</span><span> MIN_WIDTH</span>
変数名はアンダースコアで区切ることをお勧めします <span>//</span><span> $var_name</span>
関数名にはキャメルケースの命名方法を使用することをお勧めします <span>//</span><span> varName</span>
区切り文字にはすべて大文字を使用することをお勧めします <span>//</span><span> <<<DING、<<<'DING'</span>
ファイル名はすべて小文字、アンダースコア、数字にすることをお勧めします <span>//</span><span> func_name.php</span>
プライベート属性名とメソッド名には下線を付けることをお勧めします <span>//</span><span> private $_name _func</span>
インターフェース名に I_ を追加することをお勧めします<span>//</span><span>インターフェース I_Name</span>

<span>/*</span><span> 言語構造 </span><span>*/</span>
<span>array</span>()、<span>echo</span>()、<span>empty</span>()、<span>eval</span>()、<span>exit</span>()、<span>isset</span>()、<span>list</span>()、<span>print</span>()、<span>unset </span><span>()
</span><span>echo</span>、<span>print</span><span>は括弧を省略できます。</span><span>/*</span><span> 事前定義された定数 </span><span>*/</span><span>
PATH_SEPARATOR </span><span>//</span><span>パス区切り文字 (Windows の場合はセミコロン、Unix 風の場合はコロン)</span>
DIRECTORY_SEPARATOR <span>//</span><span>ディレクトリ区切り文字</span>
<span>PHP_EOL</span> <span>//</span><span>現在のシステムの改行文字</span>
<span>PHP_VERSION</span> <span>//</span><span>PHP バージョン番号</span>
<span>PHP_OS</span> <span>//</span><span>PHP サービス オペレーティング システム</span>
PHP_SAPI <span>//</span><span> は、コマンドラインを使用して実行されるかブラウザーを使用して実行されるかを決定するために使用されます。 PHP_SAPI=='cli' は、コマンドラインで実行されることを意味します</span>。
<span>PHP_INT_MAX INT の最大値、32 ビット プラットフォームの値は 2147483647
PHP_INT_SIZE INT ワード長、値は 32 ビット プラットフォームでは 4 (4 バイト)
M_PI </span><span>//</span><span>Pi 値</span>
M_E <span>//</span><span>自然数

//PHP実行環境検出関数</span>
<span>php_sapi_name</span>() <span>//</span><span>PHPおよびWEBサーバーインターフェースタイプの小文字の文字列を返します</span>
<span>この関数の戻り値は定数 PHP_SAPI と一致しています。インターフェースの種類: SAPI (サーバー API</span>、<span> SAPI)
可能な値: aolserver、apache、apache2filter、apache2handler、caudium、cgi、cgi</span>-<span>fcgi、cli、continuity、embed、isapi、litespeed milter、nsapi、phttpd、pi3web、roxen、thttpd、tux、webjames


</span><span>/*</span><span> ケースの問題 </span><span>*/</span>
-<span> クラス名、メソッド名、属性名、関数名: 大文字と小文字は区別されません
</span>-<span> 変数名、定数名、要素の添字: 大文字と小文字が区別されます。

</span><span>/*</span><span>可変識別子</span><span>*/</span><span>
変数変数 </span><span>$i</span> = 3; <span>echo</span> $<span>$k</span> 出力 3<span>;
変数関数 </span>function<span> func() {</span>echo<span> 'hello!';} </span>$i<span> = 'func' </span>//<span></span>output hello<span>
変数の添字 </span>$i<span> = '1234' </span>echo<span> </span>$i<span>[</span>$k<span>];
変数クラス名 </span>class<span> CLS{</span>public<span> </span>$k<span> = 'hello';} </span>$i<span> = 'CLS'; </span>$j<span> = </span>echo<span> </span>$j <span>; -></span>k;
可変属性 <span></span>class<span> CLS{</span>public<span> </span>$k<span> = 'hello';} </span>$i<span> = </span>new<span> CLS; </span>$i<span></span>;
変数メソッド<span></span>class<span> CLS{</span>public<span> </span>function<span> k(){</span>echo<span> 'hello';}}<span>$i</span>='k'; <span>$j</span>=<span>新しい</span> CLS; <span>$j</span>-><span>$i</span><span>();

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

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


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

     </span><span>エコー</span>「<br />」<span>;
    </span><span>$v3</span> = '値'<span>;
    </span><span>$v4</span> = &<span>$v3</span><span>;
    </span><span>設定解除</span>(<span>$v4</span><span>);
    </span><span>var_dump</span>(<span>$v3</span>, <span>$v4</span><span>);

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


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


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


<span>/*</span><span> 定数関連関数 </span><span>*/</span>
<span>定義されました</span>
<span>定義定数を取得する</span>


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


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


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


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

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

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



</span><span>/*</span><span>区切り文字</span><span>*/</span><span>
herodoc </span>-<span> は二重引用符と同じ機能を持ち、解析できます
</span><span>$str</span> = <<<<span>AAA
文字列の内容
AAA;

nowdoc </span>-<span> は一重引用符と同じ機能を持ち、解析できません
一重引用符は先頭にのみ指定します
</span><span>$str</span> = <<<'AAA'<span>
文字列の内容
AAA;


</span><span>/*</span><span> 文字列の使用法 </span><span>*/</span><span>
文字列を文字のコレクションとして使用でき、各文字に個別にアクセスできます。半角文字(文字、数字、半角句読点)のみ対応、中国語等は不可。
</span><span>$str</span> = "abcd"<span>;
</span><span>エコー</span> <span>$str</span>[3] <span>//</span><span> d</span>;
<span>エコー</span> <span>$str</span>{0} <span>//</span><span> a</span>;


<span>/*</span><span> [型操作関数] </span><span>*/</span>
<span>//</span><span>型を取得/設定します</span>
<span>gettype</span>(<span>$var</span>) <span>//</span><span>変数のデータ型を取得します</span>
<span>settype</span>(<span>$var</span>, <span>$type</span>) <span>//</span><span>変数のデータ型を設定します

//型判定</span>
<span>is_int</span>
<span>is_float</span>
<span>is_null</span>
<span>is_string</span>
<span>is_resource</span>
<span>is_array</span>
<span>is_bool</span>
<span>オブジェクトです</span>
<span>is_numeric</span><span> 変数が数値か数値文字列かを検出します

</span><span>//</span><span>指定されたデータ型に変換します</span>
<span>ブールバル
</span><span>フロートバル</span>
<span>間隔</span>
<span>ストラヴァル</span>

<span>//</span><span>フォースタイプ</span>
<span>(整数)
(</span><span>フロート</span><span>)
(</span><span>文字列</span><span>)
(ブール)
(</span><span>配列</span><span>)
(</span><span>オブジェクト</span><span>)
(</span><span>設定解除</span>) <span>//</span><span>NULLに変換</span>
(バイナリ) 変換と b プレフィックス変換 <span>//</span><span>バイナリに変換します</span>

<span>var_dump</span><span> 変数に関する情報を出力します。
                式のタイプや値など、1 つ以上の式に関する構造情報を表示します。
                配列は値を再帰的に展開し、インデントによって構造を示します。</span><span>var_export</span>(<span>$var</span> [,bool <span>$return</span>]) <span>//</span><span>変数の文字列表現をエクスポートまたは返します</span>
    <span>$return</span><span>: true の場合、変数の後の結果が返されます
</span><span>print_r</span><span> 変数に関するわかりやすい情報を印刷します
</span><span>empty</span><span> 変数が空かどうかを確認する
</span><span>isset</span><span> 変数が存在するかどうかを確認します

</span><span>/*</span><span> 【プロセス制御】 </span><span>*/</span>
<span>//</span><span>if ステートメントの代替構文</span>
<span>if</span> (条件判断):<span>
   ステートメントブロック;
</span><span>elseif</span> (条件判断):<span>
   ステートメントブロック;
</span><span>他</span>:<span>
   ステートメントブロック;
</span><span>終わり</span><span>;

</span><span>//</span><span>フロー制御の代替構文</span>
<span>HTMLを埋め込むときによく使用されます
{ を </span>: に置き換え、 } を <span>endif</span><span> などに置き換えます。
</span><span>終わり</span>
<span>終わり</span>
<span>終わります</span>
<span>エンドフォーリーチ</span>
<span>エンドスイッチ</span>


<span>/*</span><span>【スイッチ】</span><span>*/</span>
<span>スイッチ</span><span> (条件) {
   </span><span>ケース</span>ステータス値1:<span>
       ステートメントブロック;
       [</span><span>休憩</span><span>;]
   </span><span>ケース</span>ステータス値2:<span>
       ステートメントブロック;
       [</span><span>休憩</span><span>;]
   </span><span>case</span>ステータス値3:
   <span>case</span>ステータス値4:<span>
       ステートメントブロック;
       [</span><span>休憩</span><span>;]
   </span><span>デフォルト</span>:<span>
       ステートメントブロック;
       [</span><span>休憩</span><span>;]
}
switch は状態ブランチ、特殊なループです
まずステータス値を計算し、判定番号と比較します。
終了プロセスを中断する


</span><span>/*</span><span> [ループ用] </span><span>*/</span>
<span>for</span><span> (条件初期化式; 条件判定式; 条件変更式) {
ループ本体
}

ループ本体が N 回実行されると仮定すると、
条件付き初期化式は 1 回実行されます
条件判定式をN</span>+<span>1回実行する
条件変更式がN回実行される

知らせ:
    </span>1.<span> ループ変数は for ステートメントの終了後も引き続き使用でき、その値は最初の失敗の値です。
    </span>2.<span> ループ変数は for ループ本体で使用できます
    </span>3.<span> 条件式は省略可能ですが、セミコロンは省略できません
        a</span>.<span> 条件初期化式を省略した場合、条件で判定するとループ変数にnullが代入されます。
            型変換を行って比較します。初期化は for ステートメントの外側で行うこともできます。
        b</span>.<span> 条件判定式を省略した場合はループが真となり無限ループに入ります。
        c</span>.<span> 条件変更式を省略した場合はループ本体内で完結可能
    </span>4.<span> 各式は複数のステートメントで構成でき、各ステートメントはカンマで区切られます。
        条件判定式が複数の文で構成される場合、それらはすべて実行されますが、最後の文のみが判定条件となります。
    </span>5.<span> for は数値インデックスの添字配列のみを走査できます
        配列長関数: </span><span>count</span><span>()
    </span>6.<span> 初期化できるすべてのステートメントは、条件付き初期化式内に配置する必要があります。これにより、実行時間を大幅に節約できます。


</span><span>/*</span><span> 【goto】5.3+バージョン </span><span>*/</span><span>
プログラム内の指定された位置にジャンプするために使用されます。
ターゲットの場所は、ターゲット名とそれに続くコロンでマークできます。
PHP の Goto には特定の制限があり、同じファイルおよびスコープ内でのみジャンプできます。
    つまり、関数やクラス メソッドから抜け出すことも、別の関数にジャンプすることもできません。
    また、ループにジャンプしたり、構造を切り替えたりすることもできません。
    一般的な使用法は、ループまたはスイッチから抜け出すことであり、複数レベルのブレークを置き換えることができます。 
ループ(</span><span>スイッチ</span><span>)から飛び出すことはできますが、外側から飛び込むことはできません。関数やクラスメソッドを外部から内部へ使用することはできません。
へ行く;
</span><span>エコー</span>「フー」<span>;
あ</span>:
<span>エコー</span>「バー」<span>;


</span><span>/*</span><span> [ファイル読み込み中] </span><span>*/</span>
<span>必須</span> / <span>含む</span> / <span>require_once</span> / <span>include_once</span><span>
ファイルのロードでは、ロードされるファイルの種類に関係なく、ターゲット ファイル内のコードのみがロードされて実行されます。

ファイルのロードは実行フェーズに属します。require などのステートメントが実行されると、ファイルのコードがロードされます。
    コンパイルして実行し、require ステートメントの位置に戻り、次のステートメントの実行を続けます。
【知らせ】
    ロードの開始時に、まず PHP モードを終了します。
    次に、ターゲット ファイルのコードをロードし、コードを実行します。
    完了したら、再度 PHP モードに入ります。
</span><span>require</span>: 処理が失敗し、<span>E_COMPILE_ERROR</span><span> エラーが生成され、スクリプトが中止されました。
</span><span>include</span>: 処理は失敗し、<span>E_WARNING</span><span> エラーが生成され、スクリプトは実行を続けます。

</span><span>#</span><span>require_once/include_once の使用は推奨されません</span>


<span>/*</span><span> [相対パス] </span><span>*/</span><span>
現在ブラウザによってどのスクリプトが要求されているか、現在位置はどのスクリプトに属しているか。</span>./<span>file</span> と <span>file</span><span> は両方とも現在のディレクトリ内のファイル file を表します
ファイルの状況 (ファイルをネストしてロードする場合):
現在のディレクトリにファイルが見つからない場合は、コード ファイルが存在するディレクトリで検索を続けます。
ファイルが現在のディレクトリで見つかった場合、コード ファイルが配置またはロードされているディレクトリでは検索されません。
__DIR__ スクリプト ファイルが配置されているディレクトリ
</span><span>__FILE__</span><span> スクリプト ファイルのパス

include_path ロードファイルの検索ディレクトリ
    </span><span>set_include_path</span><span>() include_path を設定します。複数存在する可能性があります。パラメータとして文字列を使用します。
    この関数によって設定されたパスは、現在のファイルに対してのみ有効です。
    この設定は、直接書き込まれていないファイル パスを検索する場合にのみ有効です。
    新しい include_path を設定すると、元の include_path が上書きされます

    </span><span>get_include_path</span><span>() 現在の include_path 設定項目を取得します。パラメーターはありません

    パス区切り文字、Windows ではセミコロン、Linux ではコロン
    事前定義された定数 PATH_SEPARATOR を使用して現在の区切り文字を取得します

ファイル名を直接記述する場合:
    </span>1.<span> include_path によって設定
    </span>2.<span> 現在のディレクトリ
    </span>3.<span> コードが配置されているファイルのディレクトリ
ファイル名の前にパスが付いている場合は、パスに基づいて直接検索され、include_path は直接無視されます。


</span><span>/*</span><span> 【戻る】 </span><span>*/</span><span>
Return と require を組み合わせて、ファイルの内容を返します。Return はロードされたファイルに書き込まれます。
return は通常のスクリプト ステートメントとしてスクリプトの実行を終了できます。
return は関数の対応する値を返すことができます


</span><span>/*</span><span> [スクリプトの実行を終了して遅延させる] </span><span>*/</span>
<span>死ぬ</span> / <span>退出</span><span>終了
return はスクリプトの実行を終了することです。
die and exit 直ちにスクリプトの実行を終了します
</span><span>die</span>("That's it"<span>); この関数内の文字列を出力できます。
</span><span>sleep</span><span>() 遅延 (単位: 秒)
    デフォルトの遅延は最大 30 秒で、PHP 構成によって max_execution_time を変更できます。
    例: </span><span>睡眠</span>(12<span>);
</span><span>usleep</span><span>() は、指定されたマイクロ秒数だけ実行を遅らせます
time_sleep_until は、指定された時間までスクリプトをスリープさせます。


</span><span>/*</span><span> [関数] </span><span>*/</span>
1.<span> 関数はコンパイル時に宣言されるため、最初に定義してから呼び出す必要があります。定義と呼び出しの間に順序関係はありません。
</span>2.<span> ファイルは単なるコードのキャリアであり、プログラムはメモリ内で実行されます。
</span>3.<span> 関数の定義がロードする必要のあるファイルにある場合は、最初にファイルをロードする必要があります。そうでない場合、呼び出しはエラーになります。
</span>4.<span> 関数の定義は他のコードセグメントに出現する可能性があり、関数はコンパイル段階では実行されません。
    実行時にのみ定義されます。独立して定義された場合にのみ、メモリ内でコンパイルされます。
    他の関数の本体にある場合は、外側の関数が呼び出されたときにのみ定義され、有効になります。
</span>5.<span> 関数名は大文字と小文字が区別されません
</span>6.<span> システム関数を含め、重複した名前は許可されません
</span>7.<span>【変数関数】
    関数名は他の変数に置き換えることができます
    </span><span>$func_name</span> = "sayHello"<span>;
    </span><span>$func_name</span>(); <span>//</span><span>この時点でsayHello()関数を呼び出します</span>
<span> 注: 変数は呼び出し時にのみ使用でき、定義時には使用できません。
</span>8.<span> 変数は関数を呼び出すための関数名として使用でき、配列要素の値も使用できます!
</span>9.<span>仮引数引数、実引数引数
    パラメータに </span><span>null</span><span> を渡して、仮パラメータに値を渡したくないことを示すことができます。
    仮パラメータは値または参照によって渡すことができます。パラメータを参照で渡すには、関数を定義するときに仮パラメータの前に </span>&<span> 記号を追加する必要があります。このとき、呼び出し元の関数の実際のパラメータは変数である必要があります。
    使用する配送方法はどのように選択しますか?
        a</span>.<span> 元のデータの整合性を保証する必要がありますか?
        b</span>.<span> 効率を上げる必要がありますか?
        c</span>.<span> 大きなデータへの参照を渡すとメモリを節約できる
</span>10.<span> パラメータのデフォルト値
        a</span>.<span> 関数パラメータのデフォルト値は変数ではなく、決定された値でなければなりません。
            呼び出し前に定数が定義されている限り、定数をパラメータのデフォルト値として使用できます。
        b</span>.<span> 関数には複数のデフォルト値を設定できます。デフォルト値を持つパラメータはパラメータ リストの最後に配置することをお勧めします。
           このように、関数を呼び出すとき、デフォルト値を持つパラメータは割り当てられず、そうでない場合はエラーが発生します。
        c</span>。デフォルトのパラメータは、配列、<span>null</span><span>などの非スカラー型にすることができます。
        d</span>.<span> デフォルトのパラメータはデフォルト以外のパラメータの右側に配置する必要があります
</span>11.<span> パラメータの数
    a</span>.<span> 仮パラメータの数が実パラメータの数を超えています
        警告レベルのエラーを報告します。NULL に置き換えられます。
    b</span>.<span>には仮パラメータよりも多くの実パラメータがあります
        エラーを報告せず、順番に仮パラメータに値を割り当てます。
    c</span>.<span> パラメータの数が不確かです
        </span>1<span>) 単一の仮パラメータが定義されているわけではなく、常に仮パラメータよりも多くの実パラメータが存在します。
        </span>2<span>) [パラメータの数は可変]
            </span><span>func_get_args</span><span>() は、現在の関数が呼び出されたときにすべての実パラメータの値を取得し、すべての実パラメータ値で構成される配列を返します。
            </span><span>func_get_arg</span>() インデックス値によって識別される実際のパラメータの値を取得します。例: <span>func_get_arg</span>(0<span>)
            </span><span>func_num_args</span><span>() すべての実パラメータの数を取得します
</span>12. 【<span>return</span><span>】戻り値
    a</span>.<span> この関数の戻り値は 1 つだけです。配列を返すことで同様の結果を得ることができますが、複数の return ステートメントを含めることもできます。
    b</span>.<span> return ステートメントは関数を直ちに中止し、関数を呼び出したコード行に制御を返します。
    c</span>.<span> は配列やオブジェクトを含む任意の型を返すことができます
    d</span>.<span> 関数の戻りも値の転送と参照の転送に分けられます(変数のみを返すことも可能)
        </span>1<span>) デフォルトは値渡しメソッドです
        </span>2<span>) 参照の受け渡し方法:
            </span> - 関数を定義するときは、関数名の前に &<span> を追加して、関数が参照を返すことができることを示します
            </span>- 関数を呼び出すときは、関数名の前に &<span> を追加して、関数によって返される参照を取得します。
                このとき、関数の外で戻り値を変更すると、関数内の戻り変数の値も変更されます。
            </span>-<span> 関数が参照を返す必要がある場合は、変数を返す必要があります。
            </span>- 関数から参照を返すには、関数を宣言するときと戻り値を変数に割り当てるときに、参照演算子 & の両方を使用する必要があります。
                <span>関数</span> &returns_reference(){<span>return</span> <span>$someref</span><span>;}
                </span><span>$newref</span> =&<span> returns_reference();
        </span>3<span>) 参照を返す関数


</span><span>/*</span><span> [変数範囲] </span><span>*/</span><span>
a</span>.<span> グローバル変数とローカル変数
    </span>1<span>) スコープ間に重複はありません。つまり、異なるスコープ内の変数は相互にアクセスできません。
    </span>2) グローバルスコープ - <span> 関数の外側の領域
    </span>3) ローカルスコープ -<span> 関数内の領域、各関数は独立したスコープです

b</span>.<span> スーパーグローバル変数はグローバルとローカルの両方で使用できます。これらはすべて配列変数です。</span><span>$GLOBALS</span> <span>$_COOKIE</span> <span>$_ENV</span> <span>$_FILES</span> <span>$_GET</span>
    <span>$_POST</span> <span>$_REQUEST</span> <span>$_SERVER</span> <span>$_SESSION</span><span>
c</span>.$グローバル<span>
    1</span>) スーパーグローバル変数は存在できませんが、スーパーグローバルデータは存在する可能性があります。
    <span>2) 必要なデータをスーパーグローバル変数の配列に入れますが、一律に </span>$GLOBALS<span> を使用します
    3) </span>$GLOBALS<span></span>の機能
        <span>- 各グローバル変数は </span>$GLOBALS の要素 <span></span> に対応します。
            グローバルが追加されるたびに、同じ名前の要素<span></span>が自動的に<span></span>$GLOBALSに追加されます。
            同様に、要素が追加されるたびに、通常は関数内でグローバル変数も追加されます。
        <span>-</span> によって行われた変更は、更新や削除を含めて別の変更にもマッピングされます。
            関数内のグローバル変数にアクセスするには、<span></span>$GLOBALS<span>を使用するだけです
        - 出現したグローバル変数は</span>$GLOBALS配列<span>を通じて取得できます
    4</span>) PHP ライフサイクルでは、関数本体の外で定義されたいわゆるグローバル変数を関数内で直接取得することはできません。
<span>4</span>) グローバルキーワード (非推奨)
    ローカル変数を、同じ名前のグローバル変数への <span>「参照」</span> として宣言します。定数参照の受け渡しと同等
        <span></span>グローバル<span> </span>$var<span> </span>//<span></span> $var = &$GLOBALS['var'];<span>
        </span>$GLOBALS<span></span>とは異なります! ! !
    global は、関数の外部にある実際の変数ではなく、関数の外部にある変数を指すエイリアス変数を関数内に作成します。
    <span></span>$GLOBALS は確かに外部変数<span></span>と呼ばれ、関数内外で常に一貫性があります。
    global の役割はグローバル変数を定義することですが、このグローバル変数は Web サイト全体ではなく、現在のページ (include または require 内のすべてのファイルを含む) に適用されます。
で<span>。
    1</span>) スコープは変数にのみ適用され、定数には適用されません
    <span>2</span>) ロードされたファイルで定義されている変数のスコープは、ファイルがロードされる場所によって異なります。
        関数の外部でロードされた場合はグローバル、関数の内部でロードされた場合はローカルです。


<span></span>/*<span></span> [可変ライフサイクル] <span></span>*/<span>
1.</span> スクリプトが終了すると、グローバル変数が消えます
<span>2.</span> 関数を実行するとローカル変数が消える
<span>3.</span> 静的変数
    静的キーワード
        静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。
        静的変数は 1 回だけ初期化され、他のローカル変数は呼び出されるたびに再割り当てされます。
        静的に宣言された静的変数のライフサイクルは永久に続きます。


<span></span>/*<span></span> [反復と再帰] <span></span>*/<span></span>
反復は再帰よりも効率的です。
反復はアイデア (アルゴリズム) であり、その構造と使用法はループに似ています。
再帰とは、大きな問題を小さな問題に分割し、小さな問題を一つ一つ解決して大きな問題を解決する考え方(アルゴリズム)です
    大小の問題に対する解決策には一貫性が必要です。
    再帰の構造と構文は、図の関数に反映されています。関数本体は関数自体を呼び出します。
    再帰的終了: 問題が解決できる場合、再帰する必要はありません。


<span></span>/*<span></span> 【匿名機能・閉鎖機能】 <span></span>*/<span></span>
クロージャとも呼ばれる匿名関数を使用すると、名前を指定せずに関数を一時的に作成できます。

<span>1.</span> 無名関数を定義する場合、関数名を追加する必要はありません。
<span>2.</span> PHP は匿名関数をオブジェクトとして管理します。
<span>3.</span> 匿名関数は変数に格納する必要があります。
<span>4.</span> 匿名関数は Closure クラスを通じて実装されます
<span>5.</span> 関数をパラメータや関数の戻り値として使用できます
<span>6. 関数を宣言するとき、</span>use<span>(</span>$param<span></span>) を使用して関数の外の変数を関数に渡し、変数参照を組み合わせてクロージャを実装できます。
<span>7.</span> 変数を使用して関数を参照できます
<span></span>$func<span> = </span>function<span> (</span>$e<span></span>) {
    <span></span>エコー<span> </span>$e<span></span>;
}; <span></span>//<span></span>が終わるときは、変数代入<span>と同じようにセミコロンで終わる必要があります
</span>var_dump<span>(</span>$func<span>); </span>//<span></span>匿名関数を使用する<span>
</span>$func<span>('ITCAST') </span>//<span></span>関数呼び出し<span>;
</span> これは可変個引数関数ではなく、オブジェクトです。クロージャ クロージャ クラス
<span></span>//<span></span>文法を使う<span>
</span>匿名関数は値の概念を優先し、どこにでも現れる可能性があります。
use を使用すると、匿名関数にその外側のスコープ内の変数を使用させることができます。グローバルではありません!
使用とグローバルの違い:
    use は外部スコープの変数を使用します
<span></span>関数<span></span> out() {
    <span></span>$v<span> = "インアウト"</span>;
    <span></span>$func<span> = </span>function<span> () </span>use<span> (& </span>$v<span></span>) {
        <span></span>var_dump<span>(</span>$v<span></span>);
    }
}
    使い方はパラメータの自動受け渡しと同様で、値や参照の受け渡しもサポートしています。</span><span>//</span><span>機能</span>
    多くの場合、「一時関数」<span> (どこかでのみ呼び出される関数) と呼ばれます。
    例えば:
        PHP には array_map() 関数があり、その機能は関数内の各要素に対して関数を呼び出すことです。
        演算結果(</span><span>配列</span>) = <span>array_map</span>(演算関数,<span>演算配列);
        </span><span>$result_arr</span> = <span>array_map</span>(<span>function</span> (<span>$v</span>) {<span>return</span> <span>$v3</span>}, <span>$arr</span><span>);

</span><span>//</span><span>クロージャ使用例</span>
<span>関数</span><span> ClosureCreater() {
    </span><span>$x</span> = 1<span>;
    </span><span>return</span> <span>function</span>(<span>$fun</span> = <span>null</span>) <span>use</span>(&<span>$x</span>) {<span>//</span><span>参照渡し</span>
        <span>エコー</span> "<br /> <span>$x</span>++<span>;
        </span><span>$楽しい</span>と<span>$楽しい</span><span>();
    };
}

</span><span>$x</span> = "hello world"<span>;
</span><span>$test</span> =<span> ClosureCreater();
</span><span>$テスト</span><span>();
</span><span>$test</span>(<span>function</span>(){ <span>echo</span> "クロージャテスト 1"<span>; });
</span><span>$test</span>(<span>function</span>(){ <span>echo</span> "クロージャテスト 2"<span>; });
</span><span>$test</span>(<span>function</span>() <span>use</span>(<span>$x</span>){ <span>echo</span> "<br />".<span>$x</span><span>;});

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


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

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

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

</span><span>each</span> 配列内の現在のキー/<span>値のペアを返し、配列ポインターを 1 ステップ先に移動します。
            返されるのは、キーと値で構成される長さ 4 の配列です。添字 0 とキーはキーを表し、添字 1 と値は値を表します。
                each() を実行した後、配列ポインタは配列内の次のセルに留まります。
                    または、配列の終わりに達したときに最後のセルに留まります。
                    </span><span>each</span>を使用して配列を再度走査したい場合は、<span>reset</span><span>()を使用する必要があります。

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

</span><span>list</span> 配列内の値をいくつかの変数に代入します。<span>list</span><span>() は関数ではなく言語構造です
            数値インデックス付きの配列でのみ使用でき、数値インデックスは 0 から始まると想定されます。
            </span><span>/*</span><span>は複数の変数の値を交換するために使用できます</span><span>*/</span> <span>list</span>(<span>$a</span>, <span>$b</span>) = <span>array</span>(<span>$b</span>, <span>$a) </span><span>);
    例: </span><span>list</span>(<span>$ドリンク</span>, , <span>$power</span>) = <span>array</span>('コーヒー', 'ブラウン', 'カフェイン'<span>);

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


</span><span>/*</span><span> [配列のトラバース] </span><span>*/</span>
*<span> 最初に要素を検索し、次にキーと値を取得します

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

</span><span>ながら</span>...<span>リスト</span>...<span>それぞれ</span>
<span>while</span> (<span>list</span>(<span>$key</span>, <span>$val</span>) = <span>mysql_fetch_row</span>(<span>$result</span>)) = <span>each</span>(<span>$arr</span><span>) {
  </span><span>echo</span> "<span>$key</span> => <span>$val</span>n"<span>;
}



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

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

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

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

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

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

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

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

</span><span>//</span><span>キュー: 先入れ先出し</span>
<span>キュー関数はインデックス添字を再割り当てします
</span><span>array_unshift</span><span> 配列の先頭に 1 つ以上のセルを挿入します
</span><span>array_shift</span> この関数を使用すると、配列の先頭の要素を配列の外に移動します (<span>reset</span>())<span>array</span><span> ポインタ。

</span><span>//</span><span>ソート機能</span>
<span>sort</span><span> 配列をソートする
</span><span>rsort</span><span> 配列を逆にソートします
</span><span>asort</span><span> 配列をソートし、インデックス関係を維持します
</span><span>arsort</span><span> 配列を逆にソートし、インデックス関係を維持します
</span><span>ksort</span><span> 配列をキー名でソートします
</span><span>krsort</span><span> 配列をキー名で逆順にソートします
</span><span>usort</span><span> ユーザー定義の比較関数を使用して配列内の値を並べ替えます
</span><span>uksort</span><span> ユーザー定義の比較関数を使用して配列内のキーを並べ替えます
</span><span>uasort</span><span> ユーザー定義の比較関数を使用して配列内の値を並べ替え、インデックスの関連付けを維持します
</span><span>natsort</span><span> 「自然ソート」アルゴリズムを使用して配列をソートします
</span><span>natcasesort</span><span> 「自然ソート」アルゴリズムを使用して、大文字と小文字を区別しない方法で配列をソートします
</span><span>array_multisort</span><span> 複数の配列または多次元配列をソートします
</span><span>shuffle</span><span> 配列をシャッフルする
    パラメーターを参照によって渡し、ブール値を返します。インデックスキー名を再割り当てし、元のキー名を削除します

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

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




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


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


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

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

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

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

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

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

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

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

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

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

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


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

<span></span>#<span></span>オブジェクトのシリアル化<span>
-</span> オブジェクト内のデータのみ、つまり非静的プロパティをシリアル化できます。
<span></span>#<span></span> オブジェクトを逆シリアル化する前にクラスをロードする必要があり、自動ロード メカニズムをトリガーすることもできます。 <span>
</span>
__sleep はシリアル化するプロパティをシリアル化します。
        <span>-</span> コミットされていないデータ、または同様のクリーンアップ操作をコミットして、オブジェクトを部分的にシリアル化します。
        <span>-</span> シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返します
__wakeup デシリアライズの際、オブジェクトが必要とするリソースを事前に準備する
        <span>-</span> データベース接続を再確立するか、他の初期化操作を実行します。
    <span></span>パブリック<span> </span>関数<span></span> __sleep() {
        <span></span>return<span> </span>array<span>('server', 'username', 'password', 'db'</span>);
    }
    <span></span>パブリック<span> </span>関数<span></span> __wakeup() {
        <span></span>$this<span>-></span>connect();
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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