Archive for the ‘php’ Category
phpUnit und Klassen mit __call
Nutzt man phpUnit mit Klassen die MagicMethods wie z.B. __call() enthalten ist Vorsicht geboten. Ich habe gerade recht lange gebraucht um herauszufinden, warum folgender Test nicht funktioniert.
Zunächst zwei Klassen, eine davon definieren wir als abstract class:
<?php
class AnotherRealObject {
public function __call($method, $args) {
return 'AnotherRealObject->'.$method.'()';
}
}
abstract class SomeAbstractClassWithConcreteMethods {
private $anotherObject;
abstract public function abstractMethod();
public function concreteMethodToSetObject($o) {
$this->anotherObject = $o;
}
public function concreteMethod() {
return $this->anotherObject->aMethod();
}
}
?>
PHP Getter/Setter Generator
Ich benutze seit kurzem die PHP Development Tools von Eclipse zum Entwickeln von PHP Code. Eclipse selbst ist eine sehr gute IDE, allerdings hat das PDT Plugin hier und da doch noch einige Schwächen. Zum Beispiel war ich gerade dabei, eine neue Klasse für das IRD Bogenoffset Tool zu schreiben, die insgesamt auf 52 Felder kam. Jetzt bin ich es von Java natürlich gewohnt, dass die IDE mir für diese Felder automatisch Getter und Setter generiert – leider geht das mit den PDT nicht
.
Nach einer kurzen Google Recherche musste ich feststellen, dass im Netz auch kein brauchbarer PHP Getter/Setter Generator aufzutreiben ist. Also, nicht lange rumdümpeln, schreibe ich mir halt schnell selbst einen – sowieso die Gelegenheit sich mal die PHP Reflection API anzuschauen. Hier das Ergebnis nach 10 Minuten Arbeit:
#!/usr/bin/php
<?php
if (!is_file($argv[2]))
die('Use this way: '.$argv[0].' <class_name> <path_to_your_class`s_php_file>'."\n");
require_once($argv[2]);
$class = new $argv[1]();
$reflection = new ReflectionClass($argv[1]);
$fields = $reflection->getProperties(
ReflectionProperty::IS_PRIVATE
| ReflectionProperty::IS_PROTECTED
);
foreach ($fields AS $f) {
// getter
echo 'public function get'.ucfirst($f->getName()).'() {'."\n";
echo "\t".'return $this->'.$f->getName().';'."\n";
echo '}'."\n";
// setter
echo 'public function set'.ucfirst($f->getName()).'($val) {'."\n";
echo "\t".'$this->'.$f->getName().' = $val;'."\n";
echo '}'."\n\n";
}
echo 'Generated Getter and Setter for '.count($fields).' fields'."\n\n";
?>
Das ganze ist ein PHP-Konsolenscript. Als Parameter den Namen eurer Klasse und den Pfad zur PHP Datei mitgeben in der die Klasse deklariert ist. Als Ausgabe erhält man die Getter- und Setter-Methoden für alle Felder, die als private oder protected deklariert sind. Vielleicht hat ja noch jemand anders Verwendung dafür – mir hats eine Menge Zeit gespart
WP: Email-Absender
Ich habe heute angefangen die Kundendatenbank des IRD an WordPress anzukoppeln damit sich unsere Kunden direkt auf unserer Webseite anmelden können und sich nicht extra über WordPress registrieren müssen. Beim Testen der Funktionen hat mich der Absender der Passwort-Erinnerungs-Mails extrem gestört. WordPress benutzt hier standardmäßig den Namen “WordPress” und die Email-Adresse “wordpress@domain.tld” (wobei domain.tld natürlich durch die Domain ersetzt wird auf der WordPress läuft).
Zum Glück muss man bei WordPress mit solchen Schönheitsfehlern nicht leben – ein kleines MiniPlugin genügt um seine eigene Email-Adresse und den Absendernamen festzulegen. Hier erstmal der Code:
<?php
/*
Plugin Name: myemail
Plugin URI: http://blog.kips-world.de
Description: Some wordpress hacks for my website
Version: 1.0
Author: Dennis Saenger
Author URI: http://blog.kips-world.de
*/
function kip_from_mail($f) {
$admin = get_userdata(1);
return $admin->user_email;
}
function kip_from_name($f) {
$admin = get_userdata(1);
return $admin->display_name;
}
add_filter('wp_mail_from', 'kip_from_mail', 0, 1);
add_filter('wp_mail_from_name', 'kip_from_name', 0, 1);
?>
Um den Absendernamen und die Emailadresse zu ändern benutze ich hier je einen WordPress-Filter. Immer wenn WordPress eine Email verschicken will, werden diese beiden Filter automatisch aufgerufen. Als Parameter übergibt WordPress die Default-Werte an die Funktionen. Bei kip_from_mail() übergibt WordPress “wordpress -ät- blog.kips-world.de”, bei kip_from_name() wird “WordPress” übergeben. Man könnte diese Werte jetzt modifizieren und zurückgeben, aber ich habe mich dafür entschieden einfach den Nickname und die Emailadresse des Admin als Absender zu nutzen. Ich ignoriere die Variablen ($f) in beiden Funktionen also einfach und hole mir mit der Funktion get_userdata() einfach die Werte des admin Users (der admin hat die User-ID 1).
Um das ganze selbst auszuprobieren erstellst du in deinem WordPress-Pluginordner einfach eine Datei “myemail.php” und kopierst den obigen PHP-Code dort hinein. Im Admin-Bereich von WordPress wird es dann ein neues Plugin “myemail” geben. Dieses noch schnell aktivieren und schon sendet WordPress Emails mit einem schönen Absender!
Wer jetzt Lust bekommen hat selbst kleine Modifikationen an WordPress vorzunehmen findet im WordPress-Codex alles was er wissen muss. In der Plugin-API gibt es eine Einführung zu Filtern und Actions (die beiden Plugin-Schnittstellen von WordPress). In der Function Reference werden alle WordPress-Funktionen inklusive Beschreibung aufgelistet. Und auf der Homepage von Adam findet man eine komplette Liste mit allen Filtern und Actions (sehr wichtig!).
aptana – die web ide
Viele Entwickler von Webanwendungen sind der Meinung ein einfacher Text-Editor reicht für die tägliche Arbeit. Für kleine Projekte oder um mal schnell eine Änderung zu machen stimmt das sicherlich, aber wenn es an größere Projekte geht erleichtert eine gute IDE die Arbeit erheblich.

