La plupart des tests que les tableaux temporels par rapport aux classes testent uniquement en les instanciant. Une fois que vous commencez réellement à faire quelque chose avec eux.
J'étais un "puriste" qui n'utilisait que des baies car la performance était tellement meilleure. J'ai écrit le code suivant pour justifier à moi-même pour justifier les tracas supplémentaires de ne pas utiliser les classes (même si elles sont plus faciles sur le programmeur)
Disons simplement que j'ai été très surpris des résultats!
<?php
$rx = "";
$rt = "";
$rf = "";
$ta = 0; // total array time
$tc = 0; // total class time
// flip these to test different attributes
$test_globals = true;
$test_functions = true;
$test_assignments = true;
$test_reads = true;
// define class
class TestObject
{
public $a;
public $b;
public $c;
public $d;
public $e;
public $f;
public function __construct($a,$b,$c,$d,$e,$f)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
$this->d = $d;
$this->e = $e;
$this->f = $f;
}
public function setAtoB()
{
$this->a = $this->b;
}
}
// begin test
echo "<br>test reads: " . $test_reads;
echo "<br>test assignments: " . $test_assignments;
echo "<br>test globals: " . $test_globals;
echo "<br>test functions: " . $test_functions;
echo "<br>";
for ($z=0;$z<10;$z++)
{
$starta = microtime(true);
for ($x=0;$x<100000;$x++)
{
$xr = getArray('aaa','bbb','ccccccccc','ddddddddd','eeeeeeee','fffffffffff');
if ($test_assignments)
{
$xr['e'] = "e";
$xr['c'] = "sea biscut";
}
if ($test_reads)
{
$rt = $x['b'];
$rx = $x['f'];
}
if ($test_functions) { setArrAtoB($xr); }
if ($test_globals) { $rf = glb_arr(); }
}
$ta = $ta + (microtime(true)-$starta);
echo "<br/>Array time = " . (microtime(true)-$starta) . "\n\n";
$startc = microtime(true);
for ($x=0;$x<100000;$x++)
{
$xo = new TestObject('aaa','bbb','ccccccccc','ddddddddd','eeeeeeee','fffffffffff');
if ($test_assignments)
{
$xo->e = "e";
$xo->c = "sea biscut";
}
if ($test_reads)
{
$rt = $xo->b;
$rx = $xo->f;
}
if ($test_functions) { $xo->setAtoB(); }
if ($test_globals) { $xf = glb_cls(); }
}
$tc = $tc + (microtime(true)-$startc);
echo "<br>Class time = " . (microtime(true)-$startc) . "\n\n";
echo "<br>";
echo "<br>Total Array time (so far) = " . $ta . "(100,000 iterations) \n\n";
echo "<br>Total Class time (so far) = " . $tc . "(100,000 iterations) \n\n";
echo "<br>";
}
echo "TOTAL TIMES:";
echo "<br>";
echo "<br>Total Array time = " . $ta . "(1,000,000 iterations) \n\n";
echo "<br>Total Class time = " . $tc . "(1,000,000 iterations)\n\n";
// test functions
function getArray($a,$b,$c,$d,$e,$f)
{
$arr = array();
$arr['a'] = $a;
$arr['b'] = $b;
$arr['c'] = $c;
$arr['d'] = $d;
$arr['d'] = $e;
$arr['d'] = $f;
return($arr);
}
//-------------------------------------
function setArrAtoB($r)
{
$r['a'] = $r['b'];
}
//-------------------------------------
function glb_cls()
{
global $xo;
$xo->d = "ddxxdd";
return ($xo->f);
}
//-------------------------------------
function glb_arr()
{
global $xr;
$xr['d'] = "ddxxdd";
return ($xr['f']);
}
//-------------------------------------
?>
test lit: 1 missions de test: 1 globals test: 1 fonctions de test: 1
temps Array = 1,58905816078 Classe temps = 1,11980104446 Temps total Array (jusqu'à présent) = 1,58903813362 (100.000 itérations) total du temps de classe (jusqu'à présent) = 1.11979603767 (100 000 itérations)
temps Array = 1,02581000328 classe temps = 1,22492313385 Le temps total de Array (jusqu'à présent) = 2.61484408379 (100 000 itérations) Durée totale de classe (jusqu'à présent) = 2.34471416473 (100 000 itérations)
temps Array = 1,29942297935 Classe temps = 1,18844485283 Temps total Array (jusqu'à présent) = 3.91425895691 (100 000 itérations) Durée totale de la classe (jusqu'à présent) = 3.5331492424 (100 000 itérations)
temps Array = 1,28776097298 Classe temps = 1,02383089066 Temps total de Array (jusqu'à présent) = 5.2020149231 (100 000 itérations) Durée totale de classe (jusqu'à présent) = 4.55697512627 (100 000 itérations)
temps Array = 1,31235599518 temps de classe = 1,38880181313 temps total de Array (jusqu'à présent) = 6.51436591148 (100 000 itérations) durée totale de classe (jusqu'à présent) = 5.94577097893 (100 000 itérations)
temps Array = 1,3007349968 Temps de classe = 1,07644081116 Temps total de Array (jusqu'à présent) = 7.81509685516 (100 000 itérations) Durée totale de classe (jusqu'à présent) = 7,02220678329 (100.000 itérations)
temps Array = 1,12752890587 Classe temps = 1,07106018066 Durée totale Array (jusqu'à présent) = 8.94262075424 (100 000 itérations) durée totale de classe (jusqu'à présent) = 8.09326195717 (100 000 itérations)
temps Array = 1,08890199661 classe temps = 1,09139609337 temps total de Array (jusqu'à présent) = 10,0315177441 (100.000 itérations) Temps total en classe (jusqu'à présent) = 9.18465089798 (100,000 ite rations)
temps Array = 1,6172170639 temps de classe = 1,14714384079 Temps total de Array (jusqu'à présent) = 11.6487307549 (100 000 itérations) Durée totale de classe (jusqu'à présent) = 10.3317887783 (100 000 itérations)
temps Array = 1,53738498688 temps de classe = 1,28127002716 temps total de Array (jusqu'à présent) = 13,1861097813 (100.000 itérations) durée totale de classe (jusqu'à présent) = 11,6130547523 (100.000 itérations)
tEMPS tOTAL: durée totale Array = 13,1861097813 (1 000 000 itérations) Temps total de la classe = 11,6130547523 (1 000 000 itérations)
Ainsi, dans les deux cas, la différence est négligeable. J'ai été très surpris de constater qu'une fois que vous commencez à accéder aux choses à l'échelle mondiale, les cours deviennent un peu plus rapides. Mais ne me fais pas confiance, fais-le pour toi-même. Personnellement, je me sens maintenant complètement libre de l'utilisation de cours dans mes applications hautes performances. : D