gpt4 book ai didi

php - 使用 settype() 与 *val() 函数的最快 PHP 类型杂耍?

转载 作者:行者123 更新时间:2023-12-04 02:24:34 25 4
gpt4 key购买 nike

我试图找出最快的方法(在 PHP 5 中)来检查值是否为 type I need它是。我创建了两行代码,它们都做同样的事情。问题是我无法根据基准找出哪个最快。

(is_scalar($value) ? intval($value) : 0);
settype($value, 'integer');

我创建了以下测试代码,但除了我自己的 PC(Core2Quad + XP 32 位 + php5.2.5)和用于测试它的 dreamhost 帐户外,我没有其他任何东西 - 两者都显示大约相同的时间代码。

$array = array(
'false' => FALSE,
'false2'=> 0,
'false3'=> '0',
'false4'=> 'FALSE',
'true' => TRUE,
'true2' => 1,
'true3' => '1',
'true4' => 'TRUE',

'char' => chr(250),
'char2' => chr(10),
'utf' => 0xF0,
'utf1' => 0xFE,

'number' => '452.5435',
'number2' => '-3948.33e2',
'number3' => -343.54,
'number4' => 99.999,
'number5' => '3jk439fjk23945t324098523.349fj324r',

'int' => 2323,
'int2' => '2345',
'int3' => '0',
'int4' => array(),
'int5' => '39582347823908270983249078530793249802357846t890234879023490785',
'int6' => 3895732890543789324890123467548093248976123890548793289073246789458901234,

'object3' => new SimpleXMLElement('<xml></xml>'),

'array' => array(),
'array2' => array('hello'),
'array3' => array(3,54,21,0),
'array4' => array(0.2)
);


$start = microtime(TRUE);

for($x=0;$x<10000;$x++) {
foreach( $array as $value ) {
(is_scalar($value) ? intval($value) : 0);
//settype($value, 'integer');
}
}

print (microtime(TRUE) - $start). ' seconds';

无论如何,我想知道这里是否还有更多我遗漏的方法,即这些方法中的哪一种可能不仅工作得更快,而且还可能产生奇怪的结果。另一件事是,如果这完全证明了 int 的成功 - 那么其他类型(例如字符串和 float )也应该可以工作。

:更新:

我刚刚针对 float 类型测试了这些方法,发现 settype() 比 floatval()(0.21 秒)慢(0.28 秒)。所以这个问题的答案可能只对int类型有效。

//Float
(is_scalar($value) ? floatval($value) : 0);
settype($value, 'float');

最佳答案

我猜你是出于纯粹的理论兴趣而问,因为这种特殊情况下的速度差异在实践中并不重要。

让我们来看看 php 源代码

间隔 http://lxr.php.net/source/php-src/ext/standard/type.c#142

设置类型 http://lxr.php.net/source/php-src/ext/standard/type.c#95

如您所见,这两个函数使用相同的 convert_to_long 例程(这又减少到库调用 strtol)。 settype 包括将第二个参数与类型字符串进行比较的(很小的)开销,因此它应该稍微慢一些。

最快的方法是使用 (int) cast,因为它不涉及函数调用操作码,而是由 VM 直接执行。

关于php - 使用 settype() 与 *val() 函数的最快 PHP 类型杂耍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1618874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com