2012-05-18 94 views
0

您好我最近看到關於如何將數據存儲到對象this article將數據存儲在對象中。哪種方法更快?

$profile = new stdClass; 
$profile->first_name = 'Woppi'; 
$profile->last_name = 'Jillenjack'; 
$profile->email = '[email protected]'; 

我習慣使其成爲一個數組,那麼它類型轉換爲對象(之前我讀的文章):

$profile = array('first_name'=>'Woppi', 'last_name'=>'Jillenjack', 'email'=>'[email protected]'); 
$profile = (object)$profile; 

我在想第一種方法更快。我怎麼知道哪個更快......你能提出一個我能找到的方法嗎?

非常感謝。

+1

兩兩件事一個選擇:A)我不相信人是由實際關注對象建設的速度。 b)爲外部讀者做些更明確的事情c)基準測試有多難? d)那是4件事。 –

+0

那麼如果你每秒有上千次這樣的操作,那麼它真的很重要。此外,如果您正在創建某種您想發佈的開源庫,則希望將其完美無缺。我是一個完美主義者,我相信這確實很重要。 –

+0

@Cicada我有很多東西需要學習......我只是好奇......就這些。 – Woppi

回答

1

那麼如果你是在Linux上運行PHP,你可以測量運行每個方法與microtime()
* Windows將不會返回正確的時間,但近似的時間。如果你試圖在微秒內測量某些東西,這並不能真正幫助你。

另外我相信第二種方法應該更快,因爲它將使用用C語言編寫的集成函數,而不是解釋幾行PHP代碼然後執行它們。

所以我投了第二個票。您可以通過測量每種方法需要多少時間來獲得樂趣。

+1

你是對的我只是做了microtime事情。 :)類型轉換更快。 http://codepad.org/2M8SrO19 – Woppi

+0

我很傷心,一個類型轉換可能比創建一個類的實例並添加變量更快?理論上講,在內部,轉換需要創建一個stdClass對象,並在解析數據之後... –

+0

@Woppi只是改變這些測試的順序,你會發現類型轉換較慢:D增加循環或其他東西來使它更加準確 – Vytautas

1

在這兩種情況下,您都需要創建一個類的實例(stdClass或Array)並設置數據。在第二種情況下,您添加一個新的操作,即cast,因此存在隱式創建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 = '[email protected]';        
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'=>'[email protected]');        
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

測試還沒有定論,在這種情況下,也許內存消耗幫助我們,使使用的一個或其他

相關問題