ホームページ バックエンド開発 PHPチュートリアル マスターしなければならない 9 つの実践的な PHP 関数と特徴

マスターしなければならない 9 つの実践的な PHP 関数と特徴

Jul 25, 2016 am 08:46 AM

この記事は Tuosheng Technology によって公開されています。私の WeChat toceansoft をフォローしてください

PHP を長年使用している場合でも、今まで知らなかった機能や機能に遭遇することがあります。それらの中には、非常に便利ですが、十分に活用されていないものもあります。誰もがマニュアルや機能リファレンスのページを最初から最後まで読むわけではありません。
1、任意の数のパラメータを持つ関数
PHP ではオプションのパラメータを持つ関数を定義できることはすでにご存知かもしれません。ただし、任意の数の関数引数を完全に許可するメソッドもあります。以下はオプションのパラメーターの例です:
// 2 つのオプションの引数を持つ関数
function foo($arg1 = ”, $arg2 = ”) {
echo “arg1: $arg1n”;
echo "arg2: $arg2n";
}
foo('hello','world');
/* プリント:
引数1: こんにちは
引数2: ワールド
*/
foo();
/* プリント:
引数1:
引数2:
*/
次に、任意の数の引数を受け入れる関数を作成する方法を見てみましょう。今回は func_get_args() 関数を使用する必要があります:
// はい、引数リストは空でも構いません
function foo() {
// 渡されたすべての引数の配列を返します
$args = func_get_args();
foreach ($args as $k => $v) {
echo “arg”.($k+1).”: $vn”;
}
}
foo();
/* 何も出力しません */
foo(‘hello’);
/* プリント
引数1: こんにちは
*/
foo('hello', 'world', 'again');
/* プリント
引数1: こんにちは
引数2: ワールド
引数3: またまた
*/
2、Glob() を使用してファイルを検索します
多くの PHP 関数には、長くてわかりやすい名前が付けられています。ただし、何度も使用して慣れていない限り、glob() 関数で何ができるかを理解するのは難しい場合があります。これは、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] =>テスト.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);
/* 出力は次のようになります:
配列
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart.jpg
)
*/
3、メモリ使用量情報
スクリプトのメモリ使用量を検出することで、コードの最適化に役立ちます。 PHP は、ガベージ コレクターと非常に高度なメモリ マネージャーを提供します。スクリプトの実行中に使用されるメモリの量は増減する可能性があります。現在のメモリ使用量を取得するには、memory_get_usage() 関数を使用できます。任意の時点でメモリ使用量を最大にする必要がある場合は、memory_limit() 関数を使用できます。
echo「初期値: “.memory_get_usage().” バイト n」;
/* プリント
初期値: 361400バイト
*/
// メモリを使い切ってみましょう
for ($i = 0; $i $array []= md5($i);
}
// 配列の半分を削除しましょう
for ($i = 0; $i unset($array[$i]);
}
echo “最終: “.memory_get_usage().” bytes n”;
/* プリント
最終: 885912 バイト
*/
echo “ピーク: “.memory_get_peak_usage().” bytes n”;
/* プリント
ピーク: 13687072 バイト
*/
4、CPU 使用率情報
このためには、getrusage() 関数を使用する必要があります。この機能は Windows プラットフォームでは利用できないことに注意してください。
print_r(getrusage());
/* プリント
配列
(
[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] => [ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => )

*/
すでにシステム管理者権限を持っていない限り、これは少し不思議に思えるかもしれません。各値の説明は次のとおりです (これらを覚える必要はありません):
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 万マイクロ秒で除算し、秒パラメータ値を追加すると、合計秒数を 10 進数形式で取得できます。例を見てみましょう:
// 3 秒間スリープします (非ビジー)
sleep(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
*/

スクリプトの実行には約 3 秒かかりましたが、CPU 使用率は非常に低かったです。スリープ実行中、スクリプトは実際には CPU リソースを消費しないためです。ディスク操作の待機など、時間はかかるものの CPU 時間を消費しないタスクは他にもたくさんあります。ご覧のとおり、CPU 使用率と実際の実行時間の長さは常に同じではありません。以下に例を示します:
// 1,000 万回ループします (ビジー)
for($i=0;$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);

/* プリント
ユーザー時間: 1.424592
システム時間: 0.004204
*/

これには約 1.4 秒の CPU 時間がかかりましたが、システム コールがなかったため、ほとんどすべてがユーザー時間でした。システム時間は、プログラムのシステム コールの実行に費やされる CPU オーバーヘッドです。以下に例を示します:
$start = microtime(true);
// マイクロタイムを約 3 秒間呼び出し続けます
while(microtime(true) – $start
}
$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);

/* プリント
ユーザー時間: 1.088171
システム時間: 1.675315
*/

現在、かなりのシステム時間が消費されています。これは、スクリプトが microtime() 関数を複数回呼び出すため、必要な時間を取得するためにオペレーティング システムへのリクエストが必要になるためです。実行時間の合計が 3 秒未満であることにも気づくかもしれません。これは、サーバー上に同時に他のプロセスが存在し、スクリプトが 3 秒間ずっと CPU を 100% 使用していない可能性があるためです。
5
、魔法定数
PHP は、現在の行番号 (__LINE__)、ファイル パス (__FILE__)、ディレクトリ パス (__DIR__)、関数名 (__FUNCTION__)、クラス名 (__CLASS__)、メソッド名 (__METHOD__)、名前空間 (__NAMESPACE__) の取得などの便利な関数を提供します。魔法の定数。この記事ではすべてを説明しませんが、いくつかの使用例を紹介します。他のスクリプト ファイルをインクルードする場合は、__FILE__ 定数を使用します (または、PHP5.3 の新しい __DIR__ 定数を使用します):
// これは、ロードされたスクリプトのパスに対する相対パスです
// 異なるディレクトリからスクリプトを実行すると問題が発生する可能性があります
require_once(‘config/database.php’);
// これは常にこのファイルのパスに対する相対パスです
// どこからインクルードされたかは関係ありません
require_once(dirname(__FILE__) . ‘/config/database.php’);
__LINE__ を使用するとデバッグが簡単になります。特定の行番号を追跡できます。
// いくつかのコード
//…
my_debug(“何らかのデバッグメッセージ”,__LINE__);
/* プリント
4行目: デバッグメッセージ
*/
// さらにコード
// …
my_debug(“別のデバッグ メッセージ”, __LINE__);
/* プリント
11行目: 別のデバッグメッセージ
*/
function my_debug($msg, $line) {
echo “行 $line: $msgn”;
}
6、一意の識別子の生成
一部のシナリオでは、一意の文字列を生成する必要がある場合があります。この目的を正確に意図したものではないにもかかわらず、多くの人が md5() 関数を使用しているのを見かけます:
// 一意の文字列を生成します
echo md5(time() . mt_rand(1,1000000));
実際には、これに使用するための uniqid() という名前の PHP 関数があります。
// 一意の文字列を生成します
エコーuniqid();
/* プリント
4bd67c947233e
*/
// 別の一意の文字列を生成します
エコーuniqid();
/* プリント
4bd67c9472340
*/
文字列は一意ですが、最初の数文字が似ていることに気づくかもしれません。これは、生成された文字列がサーバー時刻を基準にしているためです。しかし、実際には、新しく生成された各 ID がアルファベット順に並べられるため、ソートが簡単になるという親切な側面もあります。重複の可能性を減らすために、接頭辞を渡すか、エントロピーを増やす 2 番目の引数を渡すことができます:
// with prefix
echo uniqid('foo_');
/* プリント
foo_4bd67d6cd8b8f
*/
// エントロピーが増加
echo uniqid(”,true);
/* プリント
4bd67d6cd8b926.12135106
*/
//両方
echo uniqid('bar_',true);
/* プリント
bar_4bd67da367b650.43684647
*/
この関数は md5() よりも短い文字列を生成するため、スペースを節約できます。
7、シリアル化
複雑な変数をデータベースまたはテキスト ファイルに保存する必要がある状況に遭遇したことがありますか?文字列をフォーマットして配列またはオブジェクトに変換する適切な方法がわからないかもしれません。PHP にはこの機能が用意されています。変数をシリアル化するには 2 つの一般的な方法があります。以下は、serialize() 関数と unserialize() 関数を使用した例です:
// 複雑な配列
$myvar = 配列(
「こんにちは」
42、
配列(1,'two'),
「リンゴ」
);
// 文字列に変換します
$string = Serialize($myvar);
echo $string;
/* プリント
a:4:{i:0;s:5:「こんにちは」;i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3: "2";}i:3;s:5:"リンゴ";}
*/
// 元の変数を再現できます
$newvar = unserialize($string);
print_r($newvar);
/* プリント
配列
(
[0] => こんにちは
[1] => 42
[2] => 配列
(
[0] => 1
[1] =>2
)
[3] => リンゴ
)
*/
これはネイティブの PHP シリアル化メソッドです。しかし、近年の JSON の人気により、PHP5.2 では JSON 形式のサポートが追加されました。これで、json_encode() 関数と json_decode() 関数を使用できるようになりました:
// 複雑な配列
$myvar = 配列(
「こんにちは」
42、
配列(1,'two'),
「リンゴ」
);
// 文字列に変換します
$string = json_encode($myvar);
echo $string;
/* プリント
["こんにちは",42,[1,"二"],"リンゴ"]
*/
// 元の変数を再現できます
$newvar = json_decode($string);
print_r($newvar);
/* プリント
配列
(
[0] => こんにちは
[1] => 42
[2] => 配列
(
[0] => 1
[1] =>2
)
[3] => リンゴ
)
*/
これはより効率的であり、特に JavaScript などの他の多くの言語との互換性があります。ただし、複雑なオブジェクトの場合、一部の情報が失われる可能性があります。
8、圧縮文字列
圧縮について話すとき、私たちは通常、ZIP 圧縮などのファイル圧縮を思い浮かべます。 PHP でも文字列圧縮が可能ですが、圧縮ファイルは必要ありません。次の例では、gzcompress() 関数と gzuncompress() 関数を使用します。
$string =
「Lorem ipsum dolor sit amet, consectetur
」 アディピシングエリート、Nunc ut elit id mi ultrices
ヌラ・ファシリシ、
サピエン・ヴェル・フェジアト前庭、ヌラ・デュイ・プレティウム・オルチ、
非究極的エリート、ロレム・イプサム・ドール
。 座って、エリートを集めてください。 プレティウム・ウラムコーパー・ウルナ・キス・イアキュリス
sed turpis Tempor luctus Curabitur sed nibh eu elit
モリス・コングー、Praesent ipsum diam、consectetur vitae
オルナレ、アリカム、ヌンクで。 Tellus posuere adipiscing、Sed non mi metus、ラキニア
オーグー、セド・マグナ・ニシ、オルナーレ・イン・モリス、モリス
レオ・コング・モリスのジュストでセド・ヌンク。 ネケ・エゲット・メトゥス・ヘンドレリット・スセレリスクのヌラム
ユー・ノン・エニム
id euismod urna sodales. ";

$compressed = gzcompress($string);
echo "元のサイズ: ".strlen($string)."n";
/* プリント
元のサイズ: 800
*/

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’);
// 何かを実行します
// …
関数 my_shutdown() {
global $start_time;
echo “実行にかかった時間: “.
(microtime(true) – $start_time).
「秒。」;
}


私の記事が気に入ったら、私のWeChat toceansoftをフォローしてください

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles