1.関数のパラメータは任意の数
PHP ではデフォルトのパラメーターを使用して関数を定義できることはご存知かもしれません。しかし、PHP では完全に任意のパラメーターを使用して関数を定義できることはご存知ないかもしれません
これはデフォルトパラメータを持つ関数を示す例です:
// 2 つのデフォルトパラメータを持つ関数 関数 foo($arg1 = , $arg2 = ) { echo "arg1: $arg1 "; echo "arg2: $arg2 "; } foo(hello,world); /* 出力: arg1: こんにちは 引数2:ワールド */ ふー(); /* 出力: 引数1: 引数2: */
|
次に、?func_get_args() メソッドを使用する、変数パラメーターを持つ関数を見てみましょう。
// はい、仮パラメータリストは空です 関数 foo() { // すべての受信パラメータの配列を取得します $args = func_get_args(); foreach ($args as $k => $v) { エコー "arg".($k+1).": $v "; } } ふー(); /* 何も出力されません */ ふー(こんにちは); /* 出力 arg1: こんにちは */ foo(こんにちは、世界、再び); /* 出力 arg1: こんにちは 引数2:ワールド arg3: 再度 */
|
2. Glob()を使用してファイルを検索します
多くの PHP 関数には、比較的長い一目瞭然の関数名が付けられていますが、?glob() を見ただけでは、この関数に慣れていない限り、この関数が何に使われるのかわからないかもしれません。
この関数は、ファイルの検索に使用できる ?scandir() と考えることができます。
// サフィックス PHP を持つすべてのファイルを取得します $files = glob(*.php); print_r($files); /* 出力: 配列 ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php ) */
|
さまざまなサフィックスを検索することもできます
// PHPファイルとTXTファイルを取得します $files = glob(*.{php,txt}, GLOB_BRACE); print_r($files); /* 出力: 配列 ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php [4] => log.txt [5] => test.txt ) */ パスを追加することもできます: $files = glob(../images/a*.jpg); print_r($files); /* 出力: 配列 ( [0] => ../images/apple.jpg [1] => ../images/art.jpg ) */
|
絶対パスを取得したい場合は、?realpath() 関数を呼び出すことができます:
$files = glob(../images/a*.jpg); // 関数を配列の各要素に適用します $files = array_map(realpath,$files); print_r($files); /* 出力は次のようになります: 配列 ( [0] => C:wampwwwimagesapple.jpg [1] => C:wampwwwimagesart.jpg ) */
|
3. メモリ使用量情報
プログラムのメモリ使用量を観察すると、コードをより適切に最適化できます。
PHPにはガベージコレクション機構と非常に複雑なメモリ管理機構があります。スクリプトが使用しているメモリ量を確認できます。現在のメモリ使用量を知るには、memory_get_usage() 関数を使用します。ピーク時のメモリ使用量を知りたい場合は、memory_get_peak_usage() 関数を呼び出します。
echo "初期値: ".memory_get_usage()." バイト "; /* 出力 初期値:361400バイト */ // メモリを使用します for ($i = 0; $i $array []= md5($i); } // メモリの半分を削除 for ($i = 0; $i unset($array[$i]); } echo "最終: ".memory_get_usage()." バイト "; /* プリント 最終:885912バイト */ echo "ピーク: ".memory_get_peak_usage()." バイト "; /* 出力ピーク値 ピーク: 13687072 バイト */
|
4. CPU使用率情報
?getrusage()関数を使うとCPU使用率を知ることができます。この機能は Windows では使用できないことに注意してください。
print_r(getrusage()); /* 出力 配列 ( [ru_oublock] => 0 [ru_inblock] => 0 [ru_msgsnd] => 2 [ru_msgrcv] => 3 [ru_maxrss] => 12692 [ru_ixrss] => 764 [ru_idrss] => 3864 [ru_minflt] => 94 [ru_majflt] => 0 [ru_nsignals] => 1 [ru_nvcsw] => 67 [ru_nivcsw] => 4 [ru_nswap] => 0 [ru_utime.tv_usec] => 0 [ru_utime.tv_sec] => 0 [ru_stime.tv_usec] => 6269 [ru_stime.tv_sec] => 0 ) */
|
CPU についてよく知らない限り、この構造は非常にわかりにくいように思えます。以下にいくつかの説明があります:
ru_oublock: ブロック出力操作 ru_inblock: ブロック入力操作 ru_msgsnd: メッセージが送信されました ru_msgrcv: メッセージを受信しました ru_maxrss: 常駐セットの最大サイズ ru_ixrss: 共有メモリの合計サイズ ru_idrss: すべての非共有メモリサイズ ru_minflt: ページのリサイクル ru_majflt: ページが無効です ru_nsignals: 受信シグナル ru_nvcsw: アクティブなコンテキスト切り替え ru_nivcsw: パッシブコンテキストスイッチング ru_nswap: 交流エリア ru_utime.tv_usec: ユーザーモード時間(マイクロ秒) ru_utime.tv_sec: ユーザー時間(秒) ru_stime.tv_usec: システムカーネル時間(マイクロ秒) ru_stime.tv_sec: システムカーネル時間(秒)
|