0

こんにちは私は最近、データをオブジェクトに保存する方法に関するこの記事を見ました:

$profile = new stdClass;
$profile->first_name = 'Woppi';
$profile->last_name = 'Jillenjack';
$profile->email = 'woppi.jillenjack@gmail.com';

私はそれを配列にしてからオブジェクトに型キャストすることに慣れています(記事を読む前に):

$profile = array('first_name'=>'Woppi', 'last_name'=>'Jillenjack', 'email'=>'woppi.jillenjack@gmail.com');
$profile = (object)$profile;

最初の方法の方が速いと思います。どちらが速いかをどうやって知ることができますか...これを見つける方法を提案できますか?

どうもありがとうございます。

4

2 に答える 2

1

LinuxでPHPを実行している場合は、microtime()
を使用して各メソッドを実行する時間を測定できます 。* Windowsは正しい時間を返しませんが、概算を返します。マイクロ秒単位で何かを測定しようとしている場合、それは実際には役に立ちません。

また、2番目の方法は、PHPコードの数行を解釈して実行するのではなく、Cで記述された統合関数を使用するため、より高速である必要があると思います。

だから私は2番目のものに投票します。それぞれの方法にかかる時間を測定することで、まだ楽しい時間を過ごすことができます。

于 2012-05-18T08:55:08.687 に答える
1

どちらの場合も、クラス(stdClassまたはArray)のインスタンスを作成し、データを設定する必要があります。2番目のケースでは、新しい操作であるキャストを追加します。したがって、stdClassインスタンスの作成と、配列からstdClassへのデータの解析操作が暗黙的に存在します。

最初のケースでは、クラスのインスタンスのみを作成し、2番目のケースでは両方を作成しますが、1はプログラマーには見えません。私は最初のものがメモリと速度でより効率的だと思います

  1 <?php                                                                                                                                                                          
  2                                                                                
  3  $time_start = microtime(true);                                                
  4                                                                                
  5 for($i=0 ; $i<1000000; $i++)                                                   
  6 {                                                                              
  7  $profile = new stdClass;$                                                      
  8  $profile->first_name = 'Woppi';                                               
  9  $profile->last_name = 'Jillenjack';                                           
 10  $profile->email = 'woppi.jillenjack@gmail.com';                               
 11  $time_end = microtime(true);$                                                  
 12 }                                                                              
 13                                                                                
 14  $object = $time_end - $time_start;                                            
 15                                                                                
 16                                                                               
 17  $time_start = microtime(true);                                               
 18  for($i=0;$i<1000000;$i++)                                                     
 19  {                                                                             
 20  $profile = array('first_name'=>'Woppi',                                      
 21          'last_name'=>'Jillenjack',                                            
 22          'email'=>'woppi.jillenjack@gmail.com');                               
 23  $profile = (object)$profile;                                                  
 24  $time_end = microtime(true);                                                  
 25  }                                                                             
 26  $array_to_object = $time_end - $time_start;                                   
 27                                                                                
 28  echo "stdClass: $object | Typecasting: $array_to_object";                     
 29                                                                              
 30 ?>

stdClass:10.045720100403 | 型キャスト:10.009358882904

stdClass:9.9519069194794 | 型キャスト:9.2100629806519

stdClass:9.2515120506287 | 型キャスト:9.480808019638

stdClass:9.5376181602478 | 型キャスト:9.2310011386871

stdClass:9.9628109931946 | 型キャスト:10.414475917816

テストは決定的なものではありません。この場合、消費されたメモリは、どちらを使用するかを選択するのに役立ちます。

于 2012-05-18T09:27:02.587 に答える