Performance: Abbastanza facile testare. Se stai facendo qualcosa come apprendimento automatico o big data, dovresti davvero guardare qualcosa che è compilato o assemblato e non interpretato; se i cicli sono veramente. Here are some benchmarks between the various programming languages. Sembra che il ciclo do-while
sia il vincitore sui miei sistemi utilizzando PHP
con questi esempi.
$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++){
//simple reassignment
$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(
//for the first 3, we're adding a space after every character.
'fortify'=>$my_var,
'whilst'=>$my_var,
'dowhilst'=>$my_var,
//for these we're simply counting to 1,000,000 from 0
//assigning the value of x to v
'forstream'=>'',
'whilestream'=>'',
'dowhilestream'=>'',
//notice how on this one the != operator is slower than
//the < operator
'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);
Criteri:while, for e foreach sono le principali strutture di controllo molte persone usano in PHP. do-while è più veloce di while
nei miei test, ma ampiamente sottoutilizzato nella maggior parte degli esempi di codifica PHP sul web.
for
è il conteggio controllato, quindi itera un numero specifico di volte; anche se è più lento nei miei risultati rispetto all'utilizzo di un while
per la stessa cosa.
while
è buono quando qualcosa potrebbe iniziare come false
, in modo che possa impedire a qualcosa di mai in esecuzione e sprecare risorse.
do-while
almeno una volta, e quindi finché la condizione non restituisce false
. È un po 'più veloce di un ciclo while
nei miei risultati, ma verrà eseguito almeno una volta.
foreach
è valido per iterare tramite array
o object
. Anche se è possibile eseguire il ciclo di una stringa con un'istruzione for
utilizzando la sintassi degli array, non è possibile utilizzare foreach per farlo in PHP.
controllo Struttura Nesting: Dipende molto da quello che stai facendo per determinare mentre la struttura di controllo da utilizzare per la nidificazione. In alcuni casi, come la programmazione orientata agli oggetti, in realtà si desidera chiamare le funzioni che contengono le strutture di controllo (singolarmente) piuttosto che l'utilizzo di programmi massicci in stile procedurale che contengono molti controlli annidati. Questo può rendere più facile leggere, eseguire il debug e creare un'istanza.
Non importa per le prestazioni. –
Stilisticamente, i cicli 'for' incrementali sono usati molto raramente per iterare gli array in PHP. 'foreach' viene in genere utilizzato poiché può fornire sia la chiave dell'array che il valore all'interno del ciclo. –