Für einige ist es offenbar schwierig das Kampfsystem für Bengine zu „kompilieren“, weil nach dem Exportieren diverse MySQL-Fehler gibt. Das liegt in der Regel daran, dass der MySQL-Connector nicht richtig eingebunden wird. Aus diesem Grund gibt es an dieser Stelle ein kleines How-To mit zwei möglichen Lösungen für den Java-Export.
Macports OSX: Shell-Skript zum starten Apache und MySQL
Wenn man auf Mac OSX via Macports Apache und MySQL installiert hat, ist es relativ umständlich jedes mal beide Dienste zu starten. Es gibt zwar die Möglichkeit Apache & MySQL beim Starten des Betriebssystems mit starten zu lassen, aber dann laufen diese immer und verbrauchen entsprechend Ressourcen. Aus dem Grund habe ich ein kleines Shell-Skript geschrieben, das diese Aufgabe erleichtert:
#! /bin/sh if [[ $EUID -ne 0 ]]; then echo "This script must be run as root." 1>&2 exit 1 fi command=$1 if [ $# -eq 0 ] then echo "Please provide a command: start, restart, stop" read command fi if [ $command = "start" -o $command = "restart" -o $command = "stop" ] then /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper $command /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper $command else echo "Unkown command provided." fi |
Anschließend lässt sich das Skript über folgenden Terminal-Befehl ausführen:
sudo /bin/sh server.sh start Starting MySQL ... SUCCESS! |
Jetzt laufen sowohl Apache, als auch MySQL.
Statt start können natürlich auch die Parameter restart und stop verwendet werden. Fehlt der Parameter komplett, fragt das Skript nochmal nach.
Dependency Injection – kurz erklärt
Dependency Injection – klingt nach professioneller Programmierung. Aber was ist das eigentlich?
Wenn man nach Dependency Injection sucht, gibt es fast ausschließlich komplexe Erklärungen, die man nicht auf Anhieb versteht. Deshalb gibt es an dieser Stelle eine möglichst einfache Erläuterung von Dependency Injection in PHP.
Nehmen wir einmal an wir haben eine Klasse Gästebuch, die beim instanziieren ein Datenbank-Objekt erwartet.
class Guestbook { /** * @var DatabaseDriver */ protected $db; public function __construct(DatabaseDriver $db) { $this->db = $db; } } |
Jetzt ist es aber aufwendig bei jeder Erzeugung eines neuen Gästebuchs das Datenbank-Objekt zu übergeben, vor allem weil die Datenbank bei allen Gästebüchern die gleiche ist. Also wurde das Entwurfsmuster Dependency Injection entwickelt, das dieses Vorgehen vereinfachen soll.
class Guestbook { /** * @var DatabaseDriver * @inject */ protected $db; public function __construct() { $result = $this->db->query("SELECT * FROM guestbook"); ... } } |
Dieses Beispiel funktioniert natürlich nicht ohne Weiteres, es zeigt aber die Idee hinter DI. Durch zum Beispiel die Angabe der Annotation @inject wird angezeigt, dass die Datenbank noch vor der Instanziierung von Guestbook eingefügt werden soll und wir damit quasi sofort arbeiten können.
In PHP gibt es diverse Frameworks, die das DI-Entwurfsmuster bereits implementieren. Dazu gehören unter anderem FLOW3, Zend Framework 2 und Symfony 2, aber eine wirklich saubere Lösung ist meiner Meinung nach noch nicht dabei. Bei FLOW3 beispielsweise werden die eigentlichen Klassen durch Fake-Klassen „überschrieben“, in denen dann das Inject vollzogen wird.
Wer DI also nutzen will, braucht in jedem Fall eine Logik, die das Inject überhaupt ausführt. Ohne Framework keine leichte Aufgabe.