ホームページ > バックエンド開発 > PHPチュートリアル > PHP開発に必須の8つの機能

PHP開発に必須の8つの機能

怪我咯
リリース: 2023-03-11 22:10:01
オリジナル
1303 人が閲覧しました

PHP を開発するプログラマーは、PHP に多くの組み込み関数があることを知っておく必要があります。これらをマスターすると、開発に必要な 8 つの PHP 関数が非常に実用的になります。すべての PHP 開発者がそれをマスターできることを願っています。

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

// 两个默认参数的函数 
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() メソッドを使用する PHP での変数パラメーターの使用法です。

// 是的,形参列表为空 
function foo() { 
// 取得所有的传入参数的数组 
$args = func_get_args(); 
foreach ($args as $k => $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() を見ると、実際にはそれが何に使われるのかわからないかもしれません。ファイルの検索に使用されます。以下の使用方法を参照してください:

// 取得所有的后缀为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); 
/* 输出:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
13.
)
*/
ログイン後にコピー

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

$files = glob(‘../images/a*.jpg'); 
print_r($files); 
/* 输出:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
ログイン後にコピー

絶対パスを取得したい場合は、realpath() 関数を呼び出すことができます:

$files = glob(‘../images/a*.jpg'); 
// applies the function to each array element 
$files = array_map(‘realpath',$files); 
print_r($files); 
/* output looks like:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/
ログイン後にコピー

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

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

echo “Initial: “.memory_get_usage().” bytes \n”; 
/* 输出
Initial: 361400 bytes
*/ 
// 使用内存 
for ($i = 0; $i < 100000; $i++) { 
$array []= md5($i); 
} 
// 删除一半的内存 
for ($i = 0; $i < 100000; $i++) { 
unset($array[$i]); 
} 
echo “Final: “.memory_get_usage().” bytes \n”; 
/* prints
Final: 885912 bytes
*/ 
echo “Peak: “.memory_get_peak_usage().” bytes \n”; 
/* 输出峰值
Peak: 13687072 bytes
*/
ログイン後にコピー

4. CPU 使用率情報を取得します。 メモリ使用量を取得します。このメソッドは Windows では使用できません。

print_r(getrusage()); 
/* 输出
Array
(
[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_ns : スワップエリア

ru_utime .tv_usec: ユーザーモード時間 (マイクロ秒)

ru_utime.tv_sec: ユーザーモード時間 (秒)

ru_stime.tv_usec: システムカーネル時間 (マイクロ秒)

ru_stime.tv_sec: システムカーネル時間 (秒)


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

// sleep for 3 seconds (non-busy) 
sleep(3); 
$data = getrusage(); 
echo “User time: “. 
($data[&#39;ru_utime.tv_sec&#39;] + 
$data[&#39;ru_utime.tv_usec&#39;] / 1000000); 
echo “System time: “. 
($data[&#39;ru_stime.tv_sec&#39;] + 
$data[&#39;ru_stime.tv_usec&#39;] / 1000000); 
/* 输出
User time: 0.011552
System time: 0
*/
sleep是不占用系统时间的,我们可以来看下面的一个例子: 
// loop 10 million times (busy) 
for($i=0;$i<10000000;$i++) { 
} 
$data = getrusage(); 
echo “User time: “. 
($data[&#39;ru_utime.tv_sec&#39;] + 
$data[&#39;ru_utime.tv_usec&#39;] / 1000000); 
echo “System time: “. 
($data[&#39;ru_stime.tv_sec&#39;] + 
$data[&#39;ru_stime.tv_usec&#39;] / 1000000); 
/* 输出
User time: 1.424592
System time: 0.004204
*/
ログイン後にコピー

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

$start = microtime(true); 
// keep calling microtime for about 3 seconds 
while(microtime(true) – $start < 3) { 
} 
$data = getrusage(); 
echo “User time: “. 
($data[&#39;ru_utime.tv_sec&#39;] + 
$data[&#39;ru_utime.tv_usec&#39;] / 1000000); 
echo “System time: “. 
($data[&#39;ru_stime.tv_sec&#39;] + 
$data[&#39;ru_stime.tv_usec&#39;] / 1000000); 
/* prints
User time: 1.088171
System time: 1.675315
*/
ログイン後にコピー

上記の例では、より多くの CPU が消費されていることがわかります。

5. システム定数の取得

PHP は、現在の行番号 (LINE)、ファイル (FILE)、ディレクトリ (DIR)、関数名 (FUNCTION)、クラス名 (CLASS) を取得できる非常に便利なシステム定数を提供します。メソッド名 (METHOD) と名前空間 (NAMESPACE) は C 言語とよく似ています。
これらは主にデバッグに使用されると考えられますが、必ずしもそうではありません。たとえば、他のファイルをインクルードする場合は ?FILE を使用できます (もちろん、PHP 5.3 以降では DIR も使用できます)。

// this is relative to the loaded script&#39;s path 
// it may cause problems when running scripts from different directories 
require_once(‘config/database.php&#39;); 
// this is always relative to this file&#39;s path 
// no matter where it was included from 
require_once(dirname(FILE) . ‘/config/database.php&#39;);
ログイン後にコピー

以下は、プログラムのデバッグに役立つデバッグ情報を出力するために LINE を使用しています:

// some code 
// … 
my_debug(“some debug message”, LINE); 
/* 输出
Line 4: some debug message
*/ 
// some more code 
// … 
my_debug(“another debug message”, LINE); 
/* 输出
Line 11: another debug message
*/ 
function my_debug($msg, $line) { 
echo “Line $line: $msg\n”;
}
ログイン後にコピー

6. 一意の ID を生成します

多くの友人は一意の番号を生成するために md5() を使用しますが、md5 () にはいくつかの欠点があります。 1. 不規則であるため、データベース内のソートのパフォーマンスが低下します。 2. 長すぎるため、より多くの保管スペースが必要になります。実際、PHP には一意の ID を生成する関数が付属しています。この関数は uniqid() です。使用方法は次のとおりです:

// generate unique string 
echo uniqid(); 
/* 输出
4bd67c947233e
*/ 
// generate another unique string 
echo uniqid(); 
/* 输出
4bd67c9472340
*/
ログイン後にコピー
このアルゴリズムは CPU タイムスタンプに基づいて生成されるため、同様の期間では ID の最初の数桁は同じになります。これは、必要に応じて ID を並べ替えるのにも便利です。重複を避けるために、次のように ID の前にプレフィックスを追加できます:

// 前缀 
echo uniqid(‘foo_&#39;); 
/* 输出
foo_4bd67d6cd8b8f
*/ 
// 有更多的熵 
echo uniqid(”,true); 
/* 输出
4bd67d6cd8b926.12135106
*/ 
// 都有 
echo uniqid(‘bar_&#39;,true); 
/* 输出
bar_4bd67da367b650.43684647
*/
ログイン後にコピー

7. シリアル化

PHP のシリアル化関数は、データをデータベースに保存する必要がある場合に使用されることが多く、より一般的です。またはファイルのシリアル化と逆シリアル化を行うには、PHP の Serialize() メソッドと unserialize() メソッドを使用できます。コードは次のとおりです。 php を使用する バージョン 5.2 以降のユーザーは、json_encode() 関数と json_decode() 関数を使用して json 形式をシリアル化できます。
// a complex array
$myvar = array( 
‘hello&#39;, 
42, 
array(1,&#39;two&#39;), 
‘apple&#39; 

); 
// convert to a string 
$string = json_encode($myvar); 
echo $string; 
/* prints
["hello",42,[1,"two"],”apple”]
*/ 
// you can reproduce the original variable 
$newvar = json_decode($string); 
print_r($newvar); 
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/
ログイン後にコピー

8、字符串压缩
当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的。PHP提供了 gzcompress() 和gzuncompress() 函数:

$string = 
“Lorem ipsum dolor sit amet, consectetur 
adipiscing elit. Nunc ut elit id mi ultricies 
adipiscing. Nulla facilisi. Praesent pulvinar, 
sapien vel feugiat vestibulum, nulla dui pretium orci, 
non ultricies elit lacus quis ante. Lorem ipsum dolor 
sit amet, consectetur adipiscing elit. Aliquam 
pretium ullamcorper urna quis iaculis. Etiam ac massa 
sed turpis tempor luctus. Curabitur sed nibh eu elit 
mollis congue. Praesent ipsum diam, consectetur vitae 
ornare a, aliquam a nunc. In id magna pellentesque 
tellus posuere adipiscing. Sed non mi metus, at lacinia 
augue. Sed magna nisi, ornare in mollis in, mollis 
sed nunc. Etiam at justo in leo congue mollis. 
Nullam in neque eget metus hendrerit scelerisque 
eu non enim. Ut malesuada lacus eu nulla bibendum 
id euismod urna sodales. “; 
$compressed = gzcompress($string); 
echo “Original size: “. strlen($string).”\n”; 
/* 输出原始大小
Original size: 800
*/ 
echo “Compressed size: “. strlen($compressed).”\n”; 
/* 输出压缩后的大小
Compressed size: 418
*/ 
// 解压缩 
$original = gzuncompress($compressed);
ログイン後にコピー

几乎有50% 压缩比率。同时,你还可以使用 gzencode() 和 gzdecode() 函数来压缩,只不用其用了不同的压缩算法。  

以上就是8个开发必备的PHP功能,是不是都很实用呢?

以上がPHP開発に必須の8つの機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート