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

在这两种情况下,您都需要创建一个类(stdClass 或 Array)的实例并设置数据。在第二种情况下,您添加了一个新操作,即强制转换,因此隐含了 stdClass 实例的创建以及从 Array 到 stdClass 的解析数据操作。

在第一种情况下,您只创建一个类的实例,在第二种情况下,两者都创建,但 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 ?>

标准类:10.045720100403 | 类型转换:10.009358882904

标准类:9.9519069194794 | 类型转换:9.2100629806519

标准类:9.2515120506287 | 类型转换:9.480808019638

标准类:9.5376181602478 | 类型转换:9.2310011386871

标准类:9.9628109931946 | 类型转换:10.414475917816

测试不是决定性的,在这种情况下,消耗的内存可能会帮助我们选择使用一种或另一种

于 2012-05-18T09:27:02.587 回答
1

好吧,如果您在 Linux 上运行 PHP,您可以使用microtime()测量运行每个方法的时间
* Windows 不会返回正确的时间,而是一个近似值。如果您试图在微秒内测量某些东西,那将不会真正帮助您。

另外我认为第二种方法应该更快,因为它将使用用 C 编写的集成函数,而不是解释几行 PHP 代码然后执行它们。

所以我投票给第二个。您仍然可以通过测量每种方法所需的时间来获得一些乐趣。

于 2012-05-18T08:55:08.687 回答