性能:
测试很容易。如果您正在进行类似机器学习或大数据的工作,应该使用编译或汇编语言而不是解释语言,这样如果时钟周期真的很重要。在
这里有各种编程语言之间的一些基准测试。看起来在我的系统上,使用这些示例的
PHP
中,
do-while
循环是获胜者。
$my_var = "some random phrase";
function fortify($my_var){
for($x=0;isset($my_var[$x]);$x++){
echo $my_var[$x]." ";
}
}
function whilst($my_var){
$x=0;
while(isset($my_var[$x])){
echo $my_var[$x]." ";
$x++;
}
}
function dowhilst($my_var){
$x=0;
do {
echo $my_var[$x]." ";
$x++;
} while(isset($my_var[$x]));
}
function forstream(){
for($x=0;$x<1000001;$x++){
$v=$x;
}
return "For Count to $v completed";
}
function whilestream(){
$x=0;
while($x<1000001){
$v=$x;
$x++;
}
return "While Count to 1000000 completed";
}
function dowhilestream(){
$x=0;
do {
$v=$x;
$x++;
} while ($x<1000001);
return "Do while Count to 1000000 completed";
}
function dowhilestream2(){
$x=0;
do {
$v=$x;
$x++;
} while ($x!=1000001);
return "Do while Count to 1000000 completed";
}
$array = array(
'fortify'=>$my_var,
'whilst'=>$my_var,
'dowhilst'=>$my_var,
'forstream'=>'',
'whilestream'=>'',
'dowhilestream'=>'',
'dowhilestream2'=>''
);
function results($array){
foreach($array as $function=>$params){
if(empty($params)){
$time= microtime();
$results = call_user_func($function);
} elseif(!is_array($params)){
$time= microtime();
$results = call_user_func($function,$params);
} else {
$time= microtime();
$results = call_user_func_array($function,$params);
}
$total = number_format(microtime() - $time,10);
echo "<fieldset><legend>Result of <em>$function</em></legend>".PHP_EOL;
if(!empty($results)){
echo "<pre><code>".PHP_EOL;
var_dump($results);
echo PHP_EOL."</code></pre>".PHP_EOL;
}
echo "<p>Execution Time: $total</p></fieldset>".PHP_EOL;
}
}
results($array);
标准: while、
for 和
foreach 是 PHP 中大多数人使用的主要控制结构。在我的测试中,
do-while 比
while
更快,但在网络上大多数 PHP 代码示例中很少使用。
for
受计数控制,因此它会迭代特定次数;尽管在我的结果中,与使用相同内容的 while
相比较慢。
while
在某些情况下很好,比如当某些东西可能开始为 false
时,它可以防止浪费资源。
do-while
至少运行一次,然后直到条件返回 false
。在我的结果中,它比 while
循环稍快,但至少会运行一次。
foreach
适用于迭代 array
或 object
。虽然你可以使用数组语法通过 for
语句迭代字符串,但在 PHP 中无法使用 foreach 进行迭代。
控制结构嵌套: 它真的取决于你正在做什么来确定何时嵌套使用控制结构。在某些情况下,比如面向对象编程,你实际上会想要调用包含控制结构(单独)的函数,而不是使用包含许多嵌套控件的过程式风格的大型程序。这样可以更容易地阅读、调试和实例化。
foreach
,因为它可以在循环内部提供数组键和值。 - Michael Berkowski