1. 関数のパラメータは任意の数
PHP ではデフォルトのパラメータを使用して関数を定義できることはご存知かもしれません。しかし、PHP では完全に任意のパラメーターを使用して関数を定義することもできることはご存知ないかもしれません
デフォルトのパラメーターを使用した関数を示す例を次に示します:
コードをコピーします コードは次のとおりです:
// 2 つの関数 foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1n";
echo "arg2: $arg2n"
}
foo('hello','world ') ;
/* 出力:
arg1: hello
arg2: world
、これは ?func_get_args() メソッドを使用します:
// はい、仮パラメータリストは空です
function foo() {
// すべての配列を取得します受信パラメータ
$args = func_get_args();
foreach ($ args as $k => $v) {
echo "arg".($k+1).": $vn";
}
}
foo ();
/* 何も出力されません*/
foo('hello');
/* 出力
arg1: hello
*/
この関数が何をするのかは、この関数に慣れていないとわかりません。
この関数は、ファイルの検索に使用できる ?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
)
/* 出力:
配列
(
[0] => ../images/apple.jpg
[1] => . ./images/art.jpg
)
*/
絶対パスを取得したい場合は、 ?realpath() 関数を呼び出すことができます:
$files = glob('../images/a*.jpg') ;
// 関数を各配列要素に適用します
$files = array_map('realpath',$files);
print_r($files);
Array
(
[0] =>
3. メモリ使用量情報
プログラムのメモリ使用量を観察すると、コードをより適切に最適化できます。
PHPにはガベージコレクション機構と非常に複雑なメモリ管理機構があります。スクリプトが使用しているメモリの量を確認できます。現在のメモリ使用量を知るには、memory_get_usage() 関数を使用します。ピーク時のメモリ使用量を知りたい場合は、memory_get_peak_usage() 関数を呼び出します。
コードをコピーします
コードは次のとおりです:
echo "Initial: ".memory_get_usage()." bytes n"
/* Output
Initial: 361400 bytes
*/
// メモリを使用します
for ($ i = 0; $i $array []= md5($i)
}
// メモリの半分を削除
for ($i = 0; $i < $ i++) {
unset($array[$i]);
echo "最終: ".memory_get_usage()." bytes n"
最終: 885912 バイト
*/
echo "ピーク: " .memory_get_peak_usage()." バイト n";
/* 出力ピーク ピーク: 13687072 バイト
*/
4. CPU 使用率情報
?getrusage() 関数を使用すると、CPU 使用率を知ることができます。この機能は Windows では使用できないことに注意してください。
コードをコピー コードは次のとおりです:
print_r(getrusage());
/* Output
Array
(
[ru_oublock] => 0
[ru_inblock] => 0
[ ru_msgsnd] = > 2
[ru_msgrcv] => 3
[ru_ixrss] => 764
[ru_minflt] gt; 94
[ru_majflt] => 0
; [ru_nvcsw] => 67
; [ru_nswap] =>
[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: システム カーネル時間 (秒)
スクリプトが消費する CPU の量を確認するには、「ユーザー モード」時間と「システム」を確認する必要があります。カーネル時間」の値。秒とマイクロ秒の部分は個別に提供されます。マイクロ秒の値を 100 万で割って秒の値に加算すると、小数部付きの秒数を取得できます。
// 3 秒間スリープします (非ビジー)
sleep(3);
$data = getrusage();
($data['ru_utime.tv_sec'] +
$data[
時間: 0.011552
システム時間: 0
10000000;$i++) {
}
$data = getrusage();
echo "ユーザー時間: "
($data['ru_utime.tv_sec'] +
$data[ 'ru_utime.tv_usec'] / 1000000);
echo "システム時刻: ". ($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* 出力
time: 1.424592
System time: 0.004204
* /
これには約 14 秒の CPU 時間がかかり、システムコールがなかったのでほとんどすべてがユーザー時間でした。
システム時間は、CPU がシステムコールでカーネル命令の実行に費やす時間です。以下に例を示します:
コードをコピー
コードは次のとおりです:
$start = microtime(true);
// microtimeを約3秒間呼び出し続けます
while(microtime(true) - $start < 3 ) {
}
$data = getrusage();
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000); echo "システム時間: ".
($data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 1000000); /* ユーザー時間: 1.088171 システム時間: 1.675315 */
上記の例では、より多くの CPU が消費されていることがわかります。
5. システム定数
PHP は、現在の行番号 (__LINE__)、ファイル (__FILE__)、ディレクトリ (__DIR__)、関数名 (__FUNCTION__)、クラス名 (__CLASS__)、メソッドを取得できる非常に便利なシステム定数を提供します。 C 言語とよく似た、名前 (__METHOD__) と名前空間 (__NAMESPACE__)。
これらは主にデバッグに使用されると考えられますが、必ずしもそうではありません。たとえば、他のファイルをインクルードする場合は、?__FILE__ を使用できます (もちろん、PHP 5.3 以降では __DIR__ も使用できます)。例。
コードをコピーします
コードは次のとおりです:
// これはロードされたスクリプトのパスに対して相対的です
// 異なるディレクトリからスクリプトを実行するときに問題が発生する可能性があります
require_once('config/database.php')
// これは常にこのファイルのパスに対して相対的です
/ / どこからインクルードされたかは関係ありません
require_once(dirname(__FILE__) . '/config/database.php');
以下は、プログラムのデバッグに役立つデバッグ情報を出力するために __LINE__ を使用しています:
//
別のデバッグ メッセージ", __LINE__);
/* 出力
11 行目: 別のデバッグ メッセージ
*/
function my_debug($msg, $line) {
echo "Line $line: $msgn";
}
6.一意のIDを生成する
以下のようにmd5()を使って一意のIDを生成する人が多いです:
// 一意の文字列を生成します
echo md5(time() . mt_rand(1,1000000));
実はPHPには があります。これを行うために特に使用される ?uniqid() という関数:
// 一意の文字列を生成します echo uniqid();
/* 出力 4bd67c947233e
*/
// 別の一意の文字列を生成します
echo uniqid( );出力
4bd67c9472340
IDの並び替えが簡単です。 MD5 ではこれができません。
名前の重複を避けるためにプレフィックスを追加することもできます:
// Prefix
echo uniqid('foo_');
/* Output
foo_4bd67d6cd8b8f
*/
// より多くのエントロピーがあります
echo uniqid('',true ) ;
/* Output
4bd67d6cd8b926.12135106
*/
さらに、生成される ID は MD5 で生成される ID よりも小さくなり、スペースが大幅に節約されます。
ユーザー名: パスワード: bkJia Sanbu 条約提出 Web サイト | PHP オープンソース関連ダウンロード | 中国語フォーラム | | Mysql | PHP | XML | DIV&CSS | データベース技術 > PHP > PHP アプリケーション > 時間: 2011 00:18 ソース:coolshell.cn 作成者:coolshell.cn クリック数:5403 回 [フォント サイズ:大、中、小] 1. 関数の任意の数のパラメータ PHP ではデフォルトのパラメータを使用して関数を定義できることはご存知かもしれません。ただし、PHP では完全に任意のパラメーターを使用して関数を定義できることはご存知ないかもしれません。以下に、デフォルト パラメーターを使用した関数の例を示します。 // 2 つのデフォルト パラメーターを持つ関数 function foo($arg1 = '', $arg2 = '') { echo arg1: $ar
7. シリアル化
より複雑なデータ構造をデータベースまたはファイルに保存しますか? 独自のアルゴリズムを記述する必要はありません。 PHP はすでにそれを行っており、?serialize() と unserialize() という 2 つの関数を提供します:
コードをコピーします
コードは次のとおりです:
//複雑な配列
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
) // シリアル化
$string = Serialize( $myvar );
echo $string;
/* 出力
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0; i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/
//逆シリアル化
$newvar = unserialize($string
1
[1 ] => two
)
[3] => apple
)
JSON をサポートし、json_encode() 関数と json_decode() 関数を使用できます
// 複雑な配列
$myvar = array( 'hello',
42,
array(1,'two'),
'apple'
) ; // 文字列に変換
$string = json_encode($myvar)
echo $string /* prints
; ",42,[1,"two"],"apple"]
*/
// 元の変数を再現できます
$newvar = json_decode($string);
print_r($newvar);
/*
を出力します配列
(
[0] => こんにちは
[1] => 42
[2] => 配列
(
[0] => 1
[1] => 2
)
[3 ] => apple
)
*/
こちらの方がコンパクトに見えますし、JavaScript や他の言語とも互換性があります。ただし、非常に複雑なデータ構造によっては、データ損失が発生する可能性があります。
8. 文字列圧縮
圧縮というとファイル圧縮を思い浮かべるかもしれませんが、実際には文字列も圧縮できます。 PHP は、?gzcompress() および gzuncompress() 関数を提供します。
コードをコピーします。 コードは次のとおりです:
$string =
Nunc ut elit id mi ultrices
adipiscing.イーティアムac マッサ
sed turpis Tempor luctus. Curabitur sed nibh eu elit
、mollis の ornare 、 leo congue mollis の sed nunc 。 "元のサイズ: ".strlen($string)."n";
/* 出力元のサイズ: 800 */
echo ".strlen($compressed )."n"; ※圧縮サイズを出力します
圧縮サイズ:418 同時に、?gzencode() 関数と gzdecode() 関数を使用して圧縮することもできますが、使用する圧縮アルゴリズムは異なります。 9. シャットダウン関数を登録する
スクリプト全体がシャットダウンされる前にコードを実行できるようにする ?register_shutdown_function() という関数があります。以下の例を見てみましょう:
コードをコピー
コードは次のとおりです:
// 開始時刻を取得します
$start_time = microtime(true);
// 何かをします
// ...
// スクリプトにかかった時間を表示します
echo "実行にかかった時間: ". true) - $start_time).
「秒」
上記の例は、特定の関数の実行時間を計算するためにのみ使用されます。その後、関数の途中で ?exit() 関数を呼び出した場合、最終的なコードは実行されません。また、ブラウザでスクリプトが終了した場合 (ユーザーが停止ボタンを押した場合)、スクリプトは実行できません。
そして register_shutdown_function() を使用すると、スクリプトが停止した後でもプログラムが実行されます:
$start_time = microtime(true);
register_shutdown_function('my_shutdown'); // 何かをします
// ...
function my_shutdown() {
global $start_time;
echo "実行にかかった時間: ".
" 秒。";
http://www.bkjia.com/PHPjc/323814.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/323814.html技術記事 1. 関数の任意の数のパラメーター PHP では、デフォルトのパラメーターを使用して関数を定義できることはご存知かもしれません。しかし、PHP では完全に任意のパラメーターを使用して関数を定義できることはご存知ないかもしれません...