PHP共通関数集

巴扎黑
巴扎黑オリジナル
2016-11-22 10:54:491021ブラウズ





1. 任意の数の関数パラメータを渡す

.NET または JAVA プログラミングでは、関数パラメータの数は通常固定されていますが、PHP では任意の数のパラメータを使用できます。次の例は、PHP 関数のデフォルトのパラメーターを示しています。

Php コード
// 2 つのデフォルト パラメーターを持つ関数
function foo($arg1 = ”, $arg2 = ”) {
echo “arg1: $arg1n”; echo "arg2: $arg2n";
foo('hello','world');
/* 出力:
arg1: hello
arg2: world
*/
foo(); :
arg2:
*/
次の例は、?func_get_args() メソッドを使用する PHP での変数パラメーターの使用法です:
// はい、仮パラメーター リストは空です
function foo() {
// Get all 受信パラメータの配列
$args = func_get_args();
foreach ($args as $k => $v) {
echo “arg”.($k+1).”: $vn”; }
foo();
/* 何も出力されません*/
foo('hello');
/* 出力
arg1: hello
*/
foo('hello', 'world', 'again' ; ?glob() を見ても、それが何に使われるのかわからないかもしれません。実際、glob() は、scandir() と同様に、ファイルの検索に使用できます。以下の使用法を参照してください:

Php コード
//サフィックス PHP を持つすべてのファイルを取得します
$files = glob('*.php');
print_r($files); 出力:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/


PHP コード
/ / PHP ファイルと TXT ファイルを取得します
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files); 出力:
Array
(
[0] => phptest) .php
[1] => pi.php
[2] => test.php
[4] => .txt
)
*/


次のパスを追加することもできます:

Php code
$files = glob('../images/a*.jpg')
print_r($files) ;出力:
配列
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/


パスを指定するには、?realpath() 関数を呼び出すことができます:

Php コード
$files = glob('../images/a*.jpg');
// 関数を各配列要素に適用します
$files = array_map ('realpath',$files);
print_r($files);
/* 出力は次のようになります:
Array
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart . jpg
)
*/


3. メモリ使用量情報を取得する

PHP のメモリ リサイクル メカニズムはすでに非常に強力です。PHP スクリプトを使用して現在のメモリ使用量を取得したり、memory_get_usage() 関数を呼び出したりすることもできます。この場合、memory_get_peak_usage() 関数を呼び出して、ピークのメモリ使用量を取得します。参照コードは次のとおりです。

Php コード
echo “Initial: “.memory_get_usage().” bytes n”
/* 出力
Initial: 361400 バイト
*/
// メモリ使用量
for ($i = 0; $ i $array []= md5($i)
// メモリの半分を削除します
for ($i unset ($array[$i]);
}
echo “Final: “.memory_get_usage().” bytes n”;
/* は
Final: 885912 バイト
*/
echo “Peak: “. Memory_get_peak_usage(). '' bytes n'';
/* 出力ピーク値
: 13687072 バイト
*/

4.メモリ使用量を取得した後、PHP の getrusage() を使用して CPU 使用量を取得することもできます。この方法は Windows では使用できません。
Php コード inPrint_r (getrusage ());
[ru_maxrss] => 764
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] =& gt; 1 C [ru_nvcsw] = & gt; 4
[ru_nswap] = & gt; & gt; 0
[ru_utime.tv_sec] = & gt; 6269
[ru_stime.tv_sec] =>
*/


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 _sec: ユーザーモード時間 (秒)
ru_stime.tv_usec: システム カーネル時間 (マイクロ秒)
ru_stime.tv_sec: システム カーネル時間 (秒)

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

Php コード
// 3 秒間スリープします (非ビジー)
$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); * 出力
ユーザー時間: 0.011552
システム時間: 0
*/


スリープはシステム時間を占有しません。 次の例を見てみましょう:

Php コード
// 1000 万回ループ (ビジー)
for( $i=0;$i}
$data = getrusage();
echo 「ユーザー時間:
($data['ru_utime.tv_sec'] +
$data[ 'ru_utime」 .tv_usec'] / 1000000);
echo "システム時間: ".
($data['ru_stime.tv_sec'] +
/* 出力
ユーザー時間: 1.424592
システム時間: 0.004204
*/


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

Php コード
$start = microtime(true);
// microtime を約 3 秒間呼び出し続けます
while(microtime(true) – $start < 3) {
}
$data = getrusage ();
echo “ユーザー時間: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000); 'ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
ユーザー時間: 1.088171
システム時間: 1.675315
*/


上記の例は、さらに多くのことを示しています。高価なCPU。

5. システム定数の取得

PHP は、現在の行番号 (__LINE__)、ファイル (__FILE__)、ディレクトリ (__DIR__)、関数名 (__FUNCTION__)、クラス名 (__CLASS__) を取得できる非常に便利なシステム定数を提供します。メソッド名 (__METHOD__) と名前空間 (__NAMESPACE__) は C 言語に非常に似ています。

これらは主にデバッグに使用されると考えられますが、必ずしもそうではありません。たとえば、他のファイルをインクルードする場合は、?__FILE__ を使用できます (もちろん、PHP 5.3 以降では __DIR__ を使用することもできます)。

Php コード
// これはロードされたスクリプトのパスに対する相対パスです
// 異なるディレクトリからスクリプトを実行すると問題が発生する可能性があります
require_once(‘config/database.php’);// これは常にこのファイルのパスに対して相対的です
// どこからインクルードされたかに関係なく


以下は __LINE__ を使用してデバッグを出力しています。情報として、これはプログラムのデバッグに役立ちます:

Php コード
// いくつかのコード
// …
my_debug(“some debug message”, __LINE__)
/* 出力
行 4: いくつかのデバッグ メッセージ
*/
// さらにコード
// …
my_debug(“別のデバッグ メッセージ”, __LINE__);
/* 出力
11 行目: 別のデバッグ メッセージ
*/
function my_debug($msg, $line) {
echo “ 行$line: $msgn”;
}


6. 一意の ID を生成する

多くの友人が md5() を使用して一意の番号を生成しますが、md5() にはいくつかの欠点があります。 1. 順序付けされていないため、データベースの並べ替えパフォーマンスが中程度になります。劣化する。 2. 長すぎるため、より多くの保管スペースが必要になります。実際、PHP には一意の ID を生成する関数が付属しています。この関数は uniqid() です。使用方法は次のとおりです:

Php コード
// 固有の文字列を生成
echo uniqid();
/* 出力
4bd67c947233e
*/
// 別の固有の文字列を生成
/* 出力
4bd67c; 9472340
* /


このアルゴリズムは CPU タイムスタンプに基づいて生成されるため、同様の期間では ID の最初の数桁が同じになり、重複を回避する場合に ID の並べ替えが容易になります。次のようなプレフィックスを追加できます:

Php code
// Prefix
echo uniqid('foo_');
/* Output
foo_4bd67d6cd8b8f
*/
// より多くのエントロピーがあります
echo uniqid(",true );
/* 出力
4bd67d6cd8b926.12135106
*/
// 両方とも
echo uniqid('bar_',true) を持ちます
/* 出力
bar_4bd67da367b650.43684647
*/


7. 連載

PHPの連載この関数はより頻繁に使用される可能性があり、より一般的です。データをデータベースまたはファイルに保存する必要がある場合は、PHP の Serialize() メソッドと unserialize() メソッドを使用してシリアル化と逆シリアル化を行うことができます。コードは次のとおりです。 :

Php コード
// 複雑な配列
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
); シリアル化
$ string =シリアル化($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
[1] => 2
)
[3] => apple
)
*/


を json 形式にシリアル化する方法は、PHP のユーザー向けにすでに行われていますので、ご心配なく。 5.2 以降では、json_encode() 関数と json_decode() 関数を使用して json 形式をシリアル化できます。コードは次のとおりです。

Php コード
// 複雑な配列
$myvar = array(
'hello',
42 ,
) array(1,'two'),
'apple'
);
// 文字列に変換
$string = json_encode($myvar);
echo $string;
["hello", 42, [1,"two"],"apple"]
*/
// 元の変数を再現できます
$newvar = json_decode($string);
/* prints
Array
; [0] => こんにちは
[1] => 42
[2] => 配列
(
[0] => 1
[1] => 2
)
[3] => apple
)
*/


8. 文字列圧縮

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

Php code
$string =
「Lorem ipsum dolor sit amet, consectetur
adipiscing elit.
Lorem ipsum dolor
」コーチングのプロセスに従うことが重要です。対象となったウラムコーパーの壺の価格の一部。たとえ大衆であっても、醜い弔いの時だ。 Curabitur sed nibh eu elit
ソフト宿題。それはまさに家庭であり、人生の結果です。その大きな子供たちに
コーチングを入れるよう伝えます。しかし、私が恐れているのではなく、ラキニア
オーグです。でも、柔らかく、柔らかく
着こなすと素晴らしいです。でも今は。また、宿題の時間にも間に合います。  
ヘンドリット・シュレシケリを恐れる必要はありません
そうではありません。予想通り、
id euismod urnメンバーが飲めるeuismod湖はありません。 「;  
$compressed = gzcompress($string);  
「元のサイズ: 」をエコーし​​ます。 strlen($string).”n”;  
/* 出力元のサイズ
元のサイズ: 800
*/
echo “圧縮サイズ: “. strlen($compressed)."n";  
/* 解光物語后后图像
圧縮サイズ: 418
*/
// 解光ストーリー
$original = gzuncompress($compressed);  


の圧縮率はほぼ 50% ですが、同時に使用することもできますが、あまり実用的ではありませんか? v class="iteye-blog-content-contain" style="font-size: 14px"> ;/div>

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