您好我最近看到this article有关如何将数据存储到对象中的信息:
$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;
我认为第一种方法更快。我怎么知道哪个更快...你能建议一种我能找到的方法吗?
非常感谢。
答案 0 :(得分:1)
如果您在Linux上运行PHP,则可以使用microtime()来衡量运行每个方法的时间 * Windows不会返回正确的时间,而是近似值。如果你试图在几微秒内测量某些东西,这对你没有什么帮助。
另外我认为第二种方法应该更快,因为它将使用用C编写的集成函数,而不是解释几行PHP代码然后执行它们。
所以我投票给第二个。您还可以通过衡量每种方法所需的时间来获得乐趣。
答案 1 :(得分: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 ?>
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
测试不是决定性的,在这种情况下,可能消耗的内存可以帮助我们选择使用其中一个或其他