ホームページ  >  記事  >  バックエンド開発  >  知っておきたい、使いやすい9つのPHP関数と特徴_PHPチュートリアル

知っておきたい、使いやすい9つのPHP関数と特徴_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:59:37777ブラウズ

以下は PHP の 9 つの非常に便利な関数です。使用したことがありますか?
1. 関数の任意の数のパラメーター
PHP では、デフォルトのパラメーターを使用して関数を定義できることはご存知かもしれません。しかし、PHP では完全に任意のパラメーターを使用して関数を定義することもできることはご存知ないかもしれません
ここでは、デフォルトのパラメーターを使用した関数を示す例を示します:

コードをコピーします コードは次のとおりです:

// デフォルトパラメータを持つ 2 つの関数 foo
function foo($arg1 = '', $arg2 = '') {

echo "arg1: $arg1/n";
echo "arg2: $arg2/n";

foo ('hello','world');
/* 出力:
arg1: hello
arg2: world
*/

foo();
/* 出力:
arg1:
arg2:
*/


それでは、 func_get_args() メソッドを使用する、可変パラメータを持つ関数を見てみましょう:


コードをコピーします コードは次のとおりです:
// はい、正式なパラメータ リストは次のとおりです。 empty
function foo() {
传 // 渡されるパラメータの配列をすべて取得します
$ args = func_get_args ();

Foreach ($ args as $ k = & gt; $ v) {
echo "arg". K+1). ": $v/n";
}

}

foo();
/* 何も出力されません*/

foo('hello');
arg1: hello
*/

foo ('hello', 'world', 'again');
/* 出力
arg1: hello
arg2: world
arg3: again
*/



2 を使用します。ファイルを見つけるため
PHP の多くの機能 関数には比較的長い一目瞭然の関数名が付いていますが、glob() を見ても、よく知っている人以外はこの関数が何に使われるのかわからないかもしれません。
この関数は、ファイルの検索に使用できる scandir() と同じように考えることができます。


コードをコピーします

コードは次のとおりです:
// サフィックス PHP を持つすべてのファイルを取得します $files = glob('*.php')
print_r($files); /* 出力:
Array
(
[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); /* 出力は次のようになります:
Array
(
[0] => C:/wamp/www/images/apple.jpg
[1] => C:/wamp/www/ image/art.jpg
)
*/



3. メモリ使用量情報

プログラムのメモリ使用量を観察すると、コードをより適切に最適化できます。
PHP には、ガベージ コレクション メカニズムと非常に複雑なメモリ管理メカニズムがあります。スクリプトが使用しているメモリの量を確認できます。現在のメモリ使用量を知るには、memory_get_usage() 関数を使用します。ピーク時のメモリ使用量を知りたい場合は、memory_get_peak_usage() 関数を呼び出します。


コードをコピーします
コードは次のとおりです:

echo "初期: ".memory_get_usage()." バイト /n";
/* 出力
初期: 361400 バイト
*/

// メモリ
for ($i = 0; $i $array []= md5($i);
}

// メモリの半分を削除
for ($i = 0; $i unset($array) [ $i]);
}

echo "最終: ".memory_get_usage()." バイト /n";
/* は
最終: 885912 バイト
*/

echo "ピーク: ".memory_get_peak_usage(). " bytes /n";
/* 出力ピーク
Peak: 13687072 バイト
*/

4. CPU 使用率情報
getrusage() 関数を使用すると、CPU 使用率を知ることができます。この機能は Windows では使用できないことに注意してください。

コードをコピーします コードは次のとおりです:
print_r(getrusage());
/* Output
Array
(
[ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd] = > 2
[ru_msgrcv] => 12692
[ru_idrss] => ;
[ru_nsignals ] => 1
[ru_nvcsw] => 4
[ru_utime.tv_usec] => 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. : ユーザーモード時間(秒)
ru_stime.tv_usec: システム カーネル時間 (マイクロ秒)
ru_stime.tv_sec: システム カーネル時間 (秒)

スクリプトが消費する CPU の量を確認するには、「ユーザーの状態時間」と「 「システム カーネル時間」の値。秒とマイクロ秒の部分は個別に提供されます。マイクロ秒の値を 100 万で割って秒の値に加算すると、小数部付きの秒数を取得できます。



コードをコピー

コードは次のとおりです:


// 3 秒間スリープします (非ビジー)
sleep(3); $data = getrusage(); . ( $data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000);
($data['ru_stime.tv_sec'] +
$data) ['ru_stime .tv_usec'] / 1000000);

/* 出力
ユーザー時間: 0.011552
システム時間: 0
*/


スリープはシステム時間を占有しません:



コードをコピーします

コードは次のとおりです:

// 1,000 万回ループ (ビジー)
for($i=0;$i
} $data = getrusage (); echo "ユーザー時間: ". ($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000); 'ru_stime.tv_sec' ] +
$data['ru_stime.tv_usec'] / 1000000);

/* 出力
ユーザー時間: 1.424592
システム時間: 0.004204
*/


これには約 14 秒の CPU 時間がかかりました、ほとんどすべて システムコールがないため、すべてユーザーの時間です。
システム時間は、CPU がシステム コールでカーネル命令の実行に費やす時間です。以下に例を示します:



コードをコピーします

コードは次のとおりです:

$start = microtime(true);
// microtime を約 3 秒間呼び出し続ける
while(microtime(true) - $start
}

$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);

/* prints
User time: 1.088171
System time: 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__ を使用してデバッグ情報を出力します。これはプログラムのデバッグに役立ちます:

コードをコピーします コードは次のとおりです:
// いくつかのコード
// ...
my_debug("some debug message ", __LINE__);
/ * 出力
4 行目: デバッグ メッセージ
*/

// さらにコード
// ...
my_debug("another debug message", __LINE__);
/* 出力
Line 11: 別のデバッグ メッセージ
* /

function my_debug($msg, $line) {
echo "Line $line: $msg/n"
}


6. 多くの人が使用します。 md5() を使用して一意の ID を生成します。 // 一意の文字列を生成します
echo md5(time() . mt_rand(1,1000000));
実際、PHP には uniqid() という関数があります。これを行うために特別に使用されます:



コードをコピー
コードは次のとおりです: // 固有の文字列を生成します
echo uniqid();
/* 出力
4bd67c947233e
*/

// 別の文字列を生成しますunique string
echo uniqid();
/* Output
4bd67c9472340
*/


これは、ジェネレーターがシステム時間に依存しているためです。 ID を簡単に並べ替えることができるため、非常に優れた機能です。 MD5 ではこれができません。
名前の重複を避けるためにプレフィックスを追加することもできます:



コードをコピーします
コードは次のとおりです: // Prefix
echo uniqid('foo_')
/* Output
foo_4bd67d6cd8b8f
* /

// より多くのエントロピーがあります
echo uniqid('',true);
/* 出力
4bd67d6cd8b926.12135106
*/

// 両方とも
echo uniqid('bar_',true);出力
bar_4bd67da367b650. 43684647
*/


さらに、生成される ID は MD5 によって生成される ID よりも短くなり、スペースを大幅に節約できます。

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);

print_r($newvar);
/* 出力
配列
(
[0] => こんにちは
[1] => 42
[2] => 配列
(
[0 ] => 1
PHP5.2 以降、PHP は json_encode() 関数と json_decode() 関数を使用できるようになります



コードをコピーします

コードは次のとおりです:

// 複雑な配列
$myvar = array(
'hello' ,
42, array(1,'two'), // 文字列に変換 $string = json_encode($myvar); string;
/* prints
["hello",42,[1,"two"],"apple"]
*/

// 元の変数を再現できます
$newvar = json_decode($string);
print_r($ newvar);*prints
array(
[0] => hello
[1] => [2] => [1] =>ただし、非常に複雑なデータ構造によっては、データ損失が発生する可能性があります。


8. 文字列圧縮

圧縮というと、ファイル圧縮を思い浮かべるかもしれません。実際、文字列も圧縮できます。 PHP は gzcompress () および gzuncompress () 関数を提供します:



コードをコピー

次のようにコードします:


$ String =
"Lorem IPSUM DOLOR SIT AMET, Consectetur
Adipisting Elite. tricies iAdipiscing Nulla facilisi. Praesent仏骨、
サピエン・ヴェル・フェウジット前庭、ヌラ・デュイ・プレティウム・オーチ、
非極性エリート、ローレム・イプサム・ドール
座って、コンセクテトゥール・アディピシング・エリート
セド・ターピス・テンポル・セド・ニブ・エウ・エリート
モル。リス・コンジ エルテルスPosueRe Adipiscing。SED MAGNA NISI、mollis の Ornare、leo congue mollis の Etiam

echo "元のサイズ: "。 strlen($string)."/n";
/* 元のサイズを出力します
*/

echo "圧縮されたサイズ: ".strlen ($compressed)."/n";圧縮サイズ
圧縮サイズ: 418
*/

// 解凍$original = gzuncompress($compressed);

圧縮率はほぼ 50%。同時に、異なる圧縮アルゴリズムを使用するだけで、 gzencode() 関数と gzdecode() 関数を使用して圧縮することもできます。

9. シャットダウン関数の登録 スクリプト全体がシャットダウンされる前にコードを実行できる register_shutdown_function() という関数があります。以下の例を見てみましょう:


コードをコピーします

コードは次のとおりです:


// 開始時間をキャプチャします
$start_time = microtime(true);

// いくつかの処理を行います
// ...

// スクリプトにかかった時間を表示します
echo "実行にかかった時間: ".
" (microtime(true) - $start_time).
" 秒。";


上記の例は、特定の関数の実行時間を計算するためにのみ使用されます。その後、関数の途中で exit() 関数を呼び出した場合、最終的なコードは実行されません。また、ブラウザでスクリプトが終了した場合 (ユーザーが停止ボタンを押した場合)、スクリプトは実行できません。
そして register_shutdown_function() を使用すると、スクリプトが停止した後でもプログラムが実行されます:
コードをコピーします コードは次のとおりです:

$start_time = microtime(true);

register_shutdown_function ('my_shutdown');

// 何かをします
// ...

function my_shutdown() {
global $start_time;

echo "実行にかかった時間: " (microtime(true) - $start_time ) .
「秒。」;
}

http://www.bkjia.com/PHPjc/328132.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/328132.html技術記事以下は、PHP の非常に便利な関数 9 つです。使ったことはありますか? 1. 関数の任意の数のパラメーター PHP では、デフォルトのパラメーターを使用して関数を定義できることはご存知かもしれません。でも、そうじゃないかもしれない…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。