Das Singleton Pattern

Da ich mich seit Langem mit Entwurfsmustern (Design-Patterns) beschäftige, habe ich mich entschlossen Codebeispiele hier zu veröffentlichen und diese zum besseren Verständnis zu beschreiben.

Hier die Implementierung des Singleton Patterns in PHP.

[php]
final class Singleton {

// Statische Variable welche die Instanz hält
private static $instance = NULL;

// Konstruktor private, damit die Klasse nur aus sich selbst heraus instanziiert werden kann
private function __construct() {}

// Anlegen und zurückgeben der Instanz
public static function getInstance() {

if (self::$instance === NULL) {
self::$instance = new self;
}
return self::$instance;
}

// Verhindert das Clonen von außen
private function __clone() {}
}

$singleton = Singleton::getInstance();
[/php]

Häufig wird dieses Singleton eingesetzt um eine Datenbank Verbindung über einen zentralen Zugriffspunkt zu steuern. Hier auch der Beispielcode, wie ich eine solche Implementierung realisiert habe:

[php]
require_once ‚Zend/Db.php‘;
require_once ‚Zend/Db/Adapter/Pdo/Mysql.php‘;
require_once ‚Zend/Registry.php‘;

class Wsmm_Core_Data
{
/**
* @var array
*/
private static $_adapters;

/**
* Singleton. Connects to the database.
*
* @return Zend_Db_Adapter_Pdo_Mysql
*/
public static function getAdapter($db = ‚default‘)
{
if (isset(self::$_adapters[$db]) == false) {
try {
//lesen der Konfiguration aus den Settings und erzeugen des Adapters
self::$_adapters[$db] = new Zend_Db_Adapter_Pdo_Mysql(Zend_Registry::get(‚config‘)->db->$db);
self::$_adapters[$db]->setFetchMode(Zend_Db::FETCH_OBJ);
self::$_adapters[$db]->getConnection()->exec("SET NAMES ‚utf8’");
} catch (Exception $e) {
//error handling
}
}

return self::$_adapters[$db];
}
}
[/php]

xt:Commerce zum kostenlosen Download

Die beliebte Onlineshop-Software XTCommerce, steht hier wieder kostenlos zum Download zur Verfügung. Die aktuelle Version lautet 3.04 SP2.1 und wurde unter der GNU GPL veröffentlicht.

Unglücklicherweise verlangt Der Herausgeber als Gegenleistung für den Download eine Support-Mitgliedschaft von 98€ für 12 Monate.

Da das Paket unter der GNU GPL veröffentlicht wurde, kann man es bei mir herunterladen :-)

304sp21_package_full

Auf der Webseite von ZEND

Nachdem ich hier im Blog einen Artikel über das ZEND-Framework geschrieben habe, hat mich ZEND gebeten, ob Sie mich auf ihrer Webseite zitieren dürfen. Seit gestern steht dies nun auf zwei Seiten im WWW inkl. Bild.

Zu finden auf:

http://www.zend.com

und

http://www.zend.com/de/services/training/

Ich arbeite schon seit meiner Selbständigkeit im Jahr 2002 mit den Produkten von Zend. Das Unternehmen hat in den letzten Jahren eine rasante Entwicklung erlebt. Das ZEND-Studio und auch das neue ZEND-Studio for Eclipse sind ausgewachsene, professionelle Werkzeuge, die kaum einen Wunsch offen lassen. Ich werde auch künftig, sowohl bei meinem Arbeitgeber als auch bei WSMM auf die Entwicklungs-Tools von ZEND zurückgreifen, weil dort vor allem auch das Preis/Leistungs Verhältnis stimmt.

ZEND Framework

Seit einiger zeit beschäftige ich mich mit dem ZEND-Framework [http://framework.zend.com/]. Nachdem ich nun auch ein zweiwöchiges Training absolviert habe (2 Stunden pro Tag / Online) muss ich sagen, dass dies eine große Erleichterung für den PHP Entwickler darstellt. Endlich kann man sich darauf konzentrieren, was die eigentliche Arbeit ausmacht. Das ZEND Framework bietet eine komplette Codebasis, die schon alles enthält, was der Entwickler in PHP3/PHP4 Zeiten „zu Fuß“ entwickelt hat.

Das komplette Framework ist objektorientiert und auf Basis von PHP5. Datenbankzugriff, E-Mail, PDF, Authentifizierung, Mehrsprachfähigkeit, Debugging, Logging, Session Management etc. Wer mehr darüber erfahren will, sollte sich einmal das sehr gute Handbuch [http://framework.zend.com/manual/en/] und die API-Doc [http://framework.zend.com/apidoc/core/] zu Gemüte führen.

Ich muss sagen, je mehr ich damit mache, desto mehr bin ich begeistert davon, und bereue den Schritt nicht, auch in der Firma auf Basis dieses Frameworks zu arbeiten. 80% der Basis-Arbeit, die man früher machen musste, nimmt einem das Framework ab. Was man sonst noch haben möchte, kann man geschickt durch Vererbung dazuentwickeln.

Auch wenn man nicht das komplette Framework mit seiner mächtigen MVC-Engine verwenden möchte, ist man beim ZEND-Framework sehr gut bedient. In Ergänzug mit PEAR, kann man sich nun wirklich auf das Entwickeln der Features konzentrieren.

Ich kann jedem nur empfehlen, sich das Framework anzuschauen. In Zukunft werden durch die sehr aktive Community noch weitere Module dazu kommen.

Warum man das Framework verwenden sollte kann man hier: [http://framework.zend.com/whyzf/] erfahren!

PHP5 und PHP4 parallel auf XAMPP in dediziertem Verzeichnis

Nach DREI Tagen, unzähligen Internetrecherchen, erfolglosen Mailing-Listen aufrufen etc. habe ich es GELÖST!

Folgende Problemstellung:
Auf einem Produktivsystem habe ich als Basis das XAMPP-Paket laufen. Aktuell stellen wir unsere entwicklung von PHP4 auf PHP5 um. Da die Systeme über die Jahre gewachsen sind, laufen die Anwendungen nicht fehlerfrei unter PHP5. Die Zeit um den Code anzupassen und einen kompletten QC-Run zu machen haben wir nicht, also muss ein Parralelbetrieb her. Die Idee war, in einem dedizierten Verzeichnis der WWW-Root alles Anwendungen auf PHP4 laufen zu lassen, und in allen anderen Verzeichnissen PHP5 zu verwenden. Soweit – so klar…. DENKSTE.

Die Lösung, die ich nun nach DREI Tagen suchen, probieren und Kopfkratzen gefunden habe, möchte ich hier für die Nachwelt festhalten:

1. webserver stoppen

2. Datei httpd-xampp.conf im Verzeichnis xampp/apache/conf/extra mit den folgenden Einträgen ergänzen

ScriptAlias /php-cgi/ „[drive]:/[path_to_xampp]/php/php4/“

<Directory „[drive]:/[path_to_xampp]/php/php4/“>
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>

3. in der Webserver-Root eine Datei .htaccess erstellen (geht unter windows nur aus einer Konsole [Start-Ausführen –> cmd]

4. in die Datei .htaccess folgendes eintragen

AddType application/x-php4 .php
SetEnv PHPRC „[drive]:/[path_to_xampp]/php/php4/“
AddHandler application/x-php4 .php
Action application/x-php4 „/php-cgi/php.exe“

5. Webserver neu starten

6. eine test.php Datei erstellen mit dem Inhalt:

<?php
echo phpversion();

//alternativ auch
//phpinfo();
?>

je nach Verzeichnis, in dem die .htaccess liegt sollte nun die Version 4.x.x oder 5.x.x angezeigt werden.