PHP: Warum count() im Schleifenkopf langsam ist und … [UPDATE]

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 »

Eclipse: Ordner und Dateien im Windows Explorer anzeigen

Veröffentlicht am 2. August 2010 um 21:56 by Fabian Martin Permalink

Wie oft muss man während der täglichen Arbeit den Explorer in einem bestimmten Projektverzeichnis öffnen? Zumindest so oft, das sich die folgende Konfiguration als sehr nützlich und zeitsparend erwiesen hat.

  • Klickt im Eclipse Fenster auf dem Pfeil, der neben dem Button zum Starten der externen Programme ist (Bild), und wählt “External Tools Configurations…” aus
  • Klickt, in dem neu geöffneten Fenster, das Symbol für einen neuen Eintrag an (1)
  • Gebt dem Eintrag einen Namen (2)
  • Gebt unter Location (3) den Pfad zur explorer.exe an (${env_var:SystemRoot}\explorer.exe)
  • Und unter Arguments (4), mit welchen Parametern der Explorer aufgerufen werden soll. Es empfiehlt sich /select,${resource_loc} dort einzutragen. Hierdurch wird das entsprechende Verzeichnis geöffnet und die ausgewählte Datei markiert.
  • Speichert mit Apply und Close

Ihr habt jetzt einen neuen Eintrag bei den externen Programmen. Wählt nun eine Datei im Project bzw. Package Manager aus und klickt den Eintrag an. Der Windows Explorer sollte aufgehen und die Datei markiert sein.

PHP Gangsta feiert Geburtstag

Veröffentlicht am 12. Juli 2010 um 16:45 by Fabian Martin Permalink

Sind die meisten Blogs zum Thema PHP sehr kurzweilig und mit wenigen Beiträgen  gefüllt, hat es Michael mit seinem Blog in nur einem Jahr auf über 140 Artikel gebracht.

Zu diesem Ergebnis möchte ich ihm herzlichst gratulieren und hoffe die Zahl der Artikel und Wettbewerbe werden bis zum zweiten Geburtstag weiter in diesem Tempo wachsen.

Wer gratulieren und etwas abgreifen möchte, sollte nicht zögern und dort einen Kommentar hinterlassen. Ihr nehmt dann automatisch an einer Verlosung mit vielen attraktiven Preisen teil. Vergesst aber nicht, dort im Blog zu stöbern. Ihr werdet dabei sicher einige interessante Artikel entdecken.

PHP: Algorithmus-Wettbewerb: Spielplan errechnen

Veröffentlicht am 10. Juli 2010 um 07:37 by Fabian Martin Permalink

Vor etwa 2 Wochen hat der PHP Gangsta zu einem neuen Wettbewerb aufgerufen. Es sollen Spielpläne nach einem bestimmten Schema errechnet werden.

Folgende Regeln sind zu beachten:

  • Die Anzahl der Spieler muss gerade sein
  • Es gibt X/2 Bretter und Runden (bei 20 Spielern gibt es 10 Bretter die an 10 Runden bespielt werden)
  • Jede Spielpaarung darf nur einmal vorkommen
  • Jeder Spieler darf nur einmal in einer Runde und an einem Brett spielen (ähnlich Sodoku)

Wenn ihr euch den kompletten Beitrag anseht, findet ihr meine Lösung. Die Berechnung dauert zwischen 3 und 300 Sekunden, und hängt davon ab, wie gut der Zufall mitspielt. Wer das ganze gleich mal testen möchte, kann eines der Ausgabeskripte nehmen, die ihr unter dem Algorithmus findet.

Schaut euch den Code einmal an, vielleicht bekommt ihr ja Ideen für einen eigenen Algorithmus. Noch habt ihr Gelegenheit daran teilzunehmen, denn der PHP Gangsta hat seine Lösung noch nicht veröffentlicht.

weiterlesen »

PHP + PDT: Probleme bei der Installation des Zend Debuggers

Veröffentlicht am 18. Juni 2010 um 23:44 by Fabian Martin Permalink

Wer derzeit versucht den Zend Debugger über die Update Seite zu installieren, wird das Problem bereits bemerkt haben. Es funktioniert nicht.

Scheinbar haben sich vor einiger Zeit die Dateinamen/Versionen geändert, aber es wurde versäumt die Update Seite zu kontrollieren. Während der Installation versucht Eclipse Dateien herunterzuladen die es auf dem Server nicht (mehr) gibt.

Was kann man also machen?
Die Lösung des Problems ist eigentlich recht einfach. Das einzige was wir hierzu benötigen ist ein Apache Server mit aktiven mod_rewrite, ein Packprogramm und ein Texteditor.

Speichert die content.jar der Update Seite auf eurem PC und entpackt den Inhalt in einen Ordner eurer Wahl. Es sollte jeder handelsübliche Packer, der das ZIP Format versteht, möglich sein.
In dem Zielordner sollte sich jetzt eine content.xml befinden. Öffnet diese mit einem Textprogramm und ersetzt alle Vorkommnisse von 20091116 durch 20091124. Packt die content.xml nun wieder in eine ZIP Datei und nennt diese content.jar.

Erstellt eine .htaccess und fügt folgenden Inhalt ein:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* http://downloads.zend.com/pdt/$0 [L]

Ihr habt jetzt eine .htaccess die jede Anfrage an eine nicht existierende Datei an die offizielle Update Seite weiterreicht.
Legt beide Dateien nun in ein Verzeichnis unterhalb eures Apache Web Roots und tragt die URL als Update Seite bei eclipse ein.

Ihr könnt nun ohne größere Schwierigkeiten den Zend Debugger installieren. Wer keine Lust hat die Änderungen selbst durchzuführen, oder den Text durchzulesen, der kann sich die geänderten Dateien auch herunterladen, oder er trägt http://a2.localdev.de/zend/ als Update Seite ein.

Downloads: