Veröffentlicht am 16. August 2010 um 23:41 by Fabian Martin Permalink
In den Kommentaren des
ursprünglichen Artikels wurde zu Recht beanstandet, das der Vergleich zwischen
for und
foreach, so wie er dort beschrieben war, nicht richtig ist, da bei foreach Werte abgefragt werden, die bei den for Schleifen fehlten. Dieser korrigierte Artikel, behebt den Fehler.
Der Artikel wurde zusätzlich mit einem Kommentar zum Thema Optimierung versehen.
Vor ein paar Tagen berichtete ragtek davon, dass count() im Schleifenkopf unschön und ineffizient ist. Beidem kann ich nur zustimmen.
Aber warum ist das so?
Die Erklärung dazu ist einfach. Bei jedem Durchlauf wird count() aufgerufen und darüber die Anzahl der Elemente ermittelt. Überprüfen kann man das Verhalten mit einem kleinen Code Snippet:
<?php
class ArrayTest implements Countable
{
public $intCountCall = 0;
public function count()
{
$this->intCountCall++;
return 100000;
}
}
$objArrayTest = new ArrayTest();
for ($intI = 0; $intI < count($objArrayTest); $intI++)
{
}
echo($objArrayTest->intCountCall . " Aufrufe von count()");
Ergebnis:
100001 Aufrufe von count()
Bei näherer Betrachtung scheint es also logisch, dass diese Variante langsamer ist, als wenn man count() einmal aufruft und den Wert zwischenspeichert.
Ist foreach schneller?
In den Kommentaren wird erwähnt, dass die Verwendung von for und count() unnötig ist, da es ja foreach gibt. Aber ist es auch schneller?
weiterlesen »
Tags: Algorithmus, Array, Iterator, PHP, Schleife, Schleifen, Schleifenkopf, Zeit
Veröffentlicht in PHP |
1 Kommentar »
Veröffentlicht am 17. Mai 2010 um 23:00 by Fabian Martin Permalink
Schon gewusst das man, in PHP, Variablen ganz einfach in ein Array wandeln kann?
String, Float, Integer
Der Wert wird zur ersten Position im Array
$strTest = "Test";
$arrTest = (array)$strTest;
var_dump($arrTest);
/**
* array(1) {
* [0]=>
* string(4) "Test"
* }
*/
$intTest = 123;
$arrTest = (array)$intTest;
var_dump($arrTest);
/**
* array(1) {
* [0]=>
* int(123)
* }
*/
$fltTest = 1.23;
$arrTest = (array)$fltTest;
var_dump($arrTest);
/**
* array(1) {
* [0]=>
* float(1.23)
* }
*/
Objekte
Die Eigenschaften des Objekts finden sich im Array als Werte wieder. Je nach Sichtbarkeit, hat der Schlüssel einen Prefix, oder auch nicht.
class TestClass
{
public $intPublicVar = 1;
protected $intPortectedVar = 2;
private $intPrivateVar = 3;
}
$objTest = new TestClass();
$arrTest = (array)$objTest;
var_dump($arrTest);
/**
* array(3) {
* ["intPublicVar"]=>
* int(1)
* ["*intPortectedVar"]=>
* int(2)
* ["TestClassintPrivateVar"]=>
* int(3)
* }
*/
Tags: Array, dump, Float, Integer, Object, Objekt, PHP, string, Variable
Veröffentlicht in PHP, Tipps & Tricks |
1 Kommentar »