ホームページ  >  記事  >  バックエンド開発  >  PHP開発に必須の8つの機能

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

巴扎黑
巴扎黑オリジナル
2018-05-23 16:46:346126ブラウズ

[はじめに] PHP 開発を行ったことのあるプログラマーは、PHP に多くの組み込み関数があることを知っておく必要があります。これらをマスターすると、開発に必要な 8 つの PHP 関数を共有します。非常に実践的であり、すべての PHP 開発者がこれらをマスターできることを願っています。 1. 任意の数の関数を渡します

PHP 開発を行ったプログラマは、PHP に多くの組み込み関数があることを知っているはずです。これらをマスターすると、PHP 開発がより快適になるでしょう。この記事では、すべての PHP 関数について説明します。非常に実践的なので、すべての PHP 開発者がマスターできることを願っています。

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

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

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

// 两个默认参数的函数  
function foo($arg1 = ”, $arg2 = ”) {  
echo “arg1: $arg1\n”;  
echo “arg2: $arg2\n”;  
}  
foo(‘hello’,'world’);  
/* 输出: 
arg1: hello 
arg2: world 
*/  
foo();  
/* 输出: 
arg1: 
arg2: 
*/  
下面这个示例是PHP的不定参数用法,其使用到了 func_get_args()方法:  
// 是的,形参列表为空  
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. glob() を使用してファイルを検索します

ほとんどの PHP 関数の関数名は文字通りその目的を理解できますが、glob() を見ると、実際、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);  
/* 输出: 
Array 
( 
[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);  
/* 输出: 
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使用量情報を取得します

メモリ使用量を取得した後、PHPのgetrusage()を使用して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_max RSS: 最大保持期間の設定サイズ
  • ru_ixrss: 合計共有メモリサイズ
  • ru_idrss: 合計非共有メモリサイズ
  • ru_minflt: ページのリサイクル
  • ru_majflt: ページの無効化
  • ru als: 受信信号
  • ru_nvcsw: アクティブコンテキストスイッチ
  • ru_nivcsw: パッシブコンテキストスイッチ
  • ru_nswap: スワップ領域
  • 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’s path  
// it may cause problems when running scripts from different directories  
require_once(‘config/database.php’);  
// this is always relative to this file’s path  
// no matter where it was included from  
require_once(dirname(__FILE__) . ‘/config/database.php’);

以下は、プログラムのデバッグに役立つデバッグ情報を出力するために __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_’);  
/* 输出 
foo_4bd67d6cd8b8f 
*/  
// 有更多的熵  
echo uniqid(”,true);  
/* 输出 
4bd67d6cd8b926.12135106 
*/  
// 都有  
echo uniqid(‘bar_’,true);  
/* 输出 
bar_4bd67da367b650.43684647 
*/

7、シリアル化

)

PHP序列化功能大家可能用的比较多,也比较常见,当你需要把数据存到数据库或者文件中是,你可以利用PHP中的serialize() 和 unserialize()方法来实现序列化和反序列化,代码如下: 

// 一个复杂的数组  
$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);  
/* 输出 
Array 
( 
[0] => hello 
[1] => 42 
[2] => Array 
( 
[0] => 1 
[1] => two 
) 
[3] => apple 
) 
*/

如何序列化成json格式呢,放心,php也已经为你做好了,使用php 5.2以上版本的用户可以使用json_encode() 和 json_decode() 函数来实现json格式的序列化,代码如下: 

// a complex array  
$myvar = array(  
‘hello’,  
42,  
array(1,’two’),  
‘apple’  
);  
// 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 サイトの他の関連記事を参照してください。

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