ホームページ  >  記事  >  バックエンド開発  >  PHP で stringbuilder を実装する必要がありますか?

PHP で stringbuilder を実装する必要がありますか?

WBOY
WBOYオリジナル
2016-06-23 13:51:211221ブラウズ

私は卒業して C# から移行しました。PHP を学習する過程で、PHP には C# のような stringbuilder 型がないことがわかりました。
C# で文字列を複数回操作する場合、string よりも stringbuilder の方が効率的であることはわかっているのに、なぜ PHP が stringbuilder を実装しないのかを聞きたいのです。
また、配列を使用して stringbuilder をシミュレートすると、効率が向上しますか?


ディスカッションへの返信 (解決策)

違いがないように感じますが、メモリのオーバーヘッドが多くなり、コスト効率が悪くなります。

文字列はシミュレーションよりもはるかに高速です。
文字列

$starttime = getMicrotime();$str = '';for($i=0;$i<100000;$i++){    $str .= $i;}$endtime = getMicrotime();printf("run time %f ms\r\n", (float)($endtime-$starttime)*1000); function getMicrotime(){    list($usec, $sec) = explode(' ', microtime());    return (float)$usec + (float)$sec;}

実行時間 61.100006 ミリ秒

配列
$starttime = getMicrotime();$arr = array();for($i=0;$i<100000;$i++){    array_push($arr, $i);}$endtime = getMicrotime();printf("run time %f ms\r\n", (float)($endtime-$starttime)*1000);function getMicrotime(){    list($usec, $sec) = explode(' ', microtime());    return (float)$usec + (float)$sec;}

実行時間 200.176954 ミリ秒

原理の説明が見つかりました:
PHP のすべての変数は同じ基礎構造 Zval を持っています。 Zval 構造から、PHP の文字列は、C++ の文字列と同様に、実際のデータへのポインタと長さ構造で構成されていることがわかります。 c とは異なり、長さは実際の変数で表されるため、その文字列はバイナリ データ (含む) にすることができます。

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