ホームページ php教程 php手册 文字列を整数 (int) に変換する intval() printf() PHP のパフォーマンス テスト

文字列を整数 (int) に変換する intval() printf() PHP のパフォーマンス テスト

Jun 13, 2016 pm 12:01 PM
int intval php printf sql パフォーマンス 整数 概要 注射 テスト 背景 変化

背景と概要
SQL インジェクションが蔓延する数年前には、文字列を整数に変換することは、すべての Web プログラムで必要な操作としてすでにリストされていました。 Web プログラムは、get または post からの ID、整数、その​​他の値を変換関数を通じて強制的に整数に変換し、危険な文字を除外し、システム自体が SQL によって挿入される可能性を最小限に抑えます。
現在、SQL インジェクションは徐々に歴史の舞台から消えていきましたが、Web プログラムの正常な動作を保証し、エラーの可能性を減らし、ユーザーの満足度を高めるためには、ユーザーからの誤った入力も変換する必要があります。私たちの必須のものに。
変換メソッド
PHP では、文字列を整数に変換するために 3 つのメソッドを使用できます。
1. 強制型変換方法
強制型変換方法は「変換対象の変数の前に括弧で囲った対象の型を追加する」です(「型のコツ」より抜粋) PHPマニュアル)の方法です。

コードをコピー コードは次のとおりです。


$foo = "1" / / $foo は文字列型です
$bar = (int)$foo; // $bar は整数型です
?> 整数型の場合はキャスト型名ですint または整数です。

2. 組み込み関数メソッド

組み込み関数メソッドは、PHP の組み込み関数 intval を使用して変数を変換します。

コードをコピー

コードは次のとおりです。 $foo = "1" / / $foo は文字列型です

$bar = intval($foo); // $bar は整数型です
?>



関数は:


int intval(mixed $var [, int $base]); (PHPマニュアルより抜粋) PHPマニュアルには配列の変換にはintval()を使用できないと明記されていますが、そして反対します。しかし、テストした結果、配列の変換時に問題は発生しません。変換された値は予想どおり 0 ではなく 1 です。 PHP 内では、配列型変数もゼロ以外の値を持つとみなされるためだと思います。オブジェクトを変換するとき、PHP は次の通知を出します:
クラス xxxx のオブジェクトは xxxxx.php の xx 行目で int に変換できません
変換値も 1 です。

3. フォーマット文字列メソッド

フォーマット文字列メソッドは、sprintf の %d を使用して、型変換の目的を達成するために指定された変数をフォーマットします。

コードをコピー

コードは次のとおりです。 $foo = "1" / / $foo は文字列型です

$bar = sprintf("%d", $foo); // $bar は文字列型です
?> 厳密には、 sprintf 変換結果は依然として文字列型であるため、文字列を整数に変換する方法とみなされるべきではありません。しかし、彼の処理後の文字列値は確かに「強制的に文字列型に変換された整数」になっています。
実際のテスト
上記では、PHP で文字列を整数に変換する 3 つの方法を紹介しました。普通のプログラマの場合はここまでです。次の部分は異常なプログラマの場合です。

1. 基本関数テスト


次の配列を設定します:


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

$a[] = "1"; $a[] = "1a"; >$a[ ] = "1a2"; $a[] = "0";

$a[] = "2.3" ;

$a[] = "-1";
$a[] = new Directory();


シーケンス要素に上記で指定された配列を使用して、変換ステータスを確認します。プログラムのソース コードは次のとおりです。



コードをコピー

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

$a[] = " 1";
$a[] = "1a"; [] = "0" ;

$a[] = 配列('4',2); $a[] = "-1"; 🎜>$a[] = new Directory(); // int print "(int)
";
foreach($a as $v)

{

var_dump((int )$v);
print "
";
// intval
print "intval();
"; ;
foreach( $a as $v)
{
var_dump(intval($v));
print "
"; sprintf
print " sprintf();
";
foreach($a as $v)
{
var_dump(sprintf("%d", $v));
print "< ;br />"
}
?>


プログラムの最終的な実行結果は次のとおりです (オブジェクトの変換時に表示される通知は削除されています):
(int)
int(1)
int(0)
int (1)
int(1)
int(0)
int(1)
int(2)
int(-1)
int(1)
intval ();
int(1)
int(0)
int(1)
int(1)
int(0)
int(1)
int( 2)
int (-1)
int(1)
sprintf();
string(1) "1"
string(1) "0"
string(1) ) "1"
string(1) "1"
string(1) "0"
string(1) "1"
string(1) "2"
string(2) ) "-1"
string(1) "1"
3 つの変換の結果はまったく同じであることがわかります。したがって、機能の観点から見ると、3 つのメソッドはすべて変換作業が可能であるため、次のステップはどれがより効率的であるかを確認することです。
2. パフォーマンス テスト
テストされた文字列は、注入作業で使用できるものです:

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


$foo = "1';Select * ...";
?>
タイムポイントを取得します。は次のとおりです (消費時間を計算するためにテストの開始点と終了点を取得するために使用されます):

**
* PHP 5 の動作を複製する単純な関数
*/
function microtime_float()
{
list($usec, $sec) =explode(" ", microtime());
return ((float)$usec (float)$sec );
}
?>


(PHP マニュアルの microtime() 関数のセクションより抜粋)
テストプロセスは、各メソッドを使用して変数を変換します。 $foo を 1,000,000 回 (100 万回) 実行し、それぞれの消費時間を出力し、誤差をできるだけ減らすために合計 3 セットのテストを実行します。テスト プログラムは次のとおりです。

コードをコピー コードは次のとおりです。


function microtime_float()
{
list($usec, $sec) =explode(" ", microtime());
return ((float)$usec (float)$sec);
$foo = "1';Select * ...";

// (int)
$fStart = microtime_float(); ;1000000;$i )
{
$bar = (int)$foo;
}
$fEnd = microtime_float(); ($fEnd) - $fStart) . "
// intval()
$fStart = microtime_float()
for($i=0;$i<1000000;$i )
{
$bar($foo);
}
$fEnd = microtime_float();
print "intval():" . s
";
// sprintf()
$fStart = microtime_float();
for($i=0;$i{
$bar = sprintf( "%d", $foo);
}
$fEnd = microtime_float();
print "sprintf():" . ;br />" ;
?>


最終テスト結果:
(int):0.67205619812012s

intval():1.1603000164032s
sprintf() :2.1068270206451s
(int):0.66051411628723s
intval():1.1493890285492s
sprintf():2.1008238792419s
(int):0.6687879562 3779s
intval():1.161343 0976868s
sprintf(): 2.0976209640503s

このテストは少し異常ですが (整数を 100 万回連続して変換する人がいるでしょうか?) ) ですが、キャストを使用して文字列を整数に変換するのが最も速いことがわかります。
概要
強制型変換を使用して文字列を整数に変換することは、最も直接的な変換方法の 1 つです (整数変数の値を直接取得できます)。コードの可読性の観点から見ると、sprintf メソッドのコードは比較的長く、結果として再度強制型変換が必要になる場合があります。intval 関数は典型的なプロセス指向の変換であり、強制型変換の考え方はより直接的です。 「変容」が読者に伝わります。効率の観点から言えば、強制型変換は最速の変換方法でもあります。したがって、変換作業を頻繁に行うプログラマーにはこの方法をお勧めします。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の 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プログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

See all articles