Daily WTF: boolean Werte im switch Konstrukt

5 Kommentare

Na, wer errät die Ausgabe von folgendem Code?

$var = true;

switch($var) {
    case "foobar":
        echo "foobar";
        break;

    default:
        echo "default";
}

Richtig – „foobar“! Vermutlich weil intern („foobar“ == true) gemacht wird und das true ist. ^^

Advertisements

Was spricht gegen Java?

7 Kommentare

Also wenn ich Artikel wie „Was fehlt dir an PHP?“ (hier vom PHP Gangsta) lese und die Kommentare dazu, frag ich mich: Warum nicht gleich Java nehmen? Was spricht gegen Java?

PHP scheint ja wirklich immer mehr in Richtung Java zu tendieren, vielleicht haben wir bald auch einen Java Zwilling der dann den Vorteil hat, dass er bei fast allen Hostern standardmäßig läuft.
Aber „Hoster“ ist doch nicht so ein großes Argument gegen Java? Einen Root oder vServer (mit Root Rechten) gibt es doch schon ab 10-15 Euro und da lässt sich ja dann auch Java drauf installieren und ich wette, dass es bestimmt einen Java-Hoster gibt, der ein bisschen Platz umsonst anbietet.

Das Problem ist (und da bin ich lange nicht der erste der das sagt), dass PHP keine klare Richtung hat: soll es objektorientierter werden oder weiterhin die einfache Erlernbarkeit und Verwendung fördern?
Wenn OOP gewünscht ist, dann kann man gleich auf Java umsteigen. Wenn PHP weiterhin „Duck-Typing“ und sonstige „fehlertolerante“ Features bietet, dann sollte dieser Stil vielleicht etwas weiter ausgebaut werden (keine Ahnung wie).
Vielleicht ist aber auch gerade dieser OOP-Prozedur-Hybrid Stil das, was PHP so besonders macht?

Ja, auch mir fehlt meistens die feste Typisierung in PHP oder „finally“ beim try-catch und weitere „OOP“ Features. Aber wenn ich das benötige, programmiere ich eben in Java (außer ich bin wie in den meisten Fällen vom System zu PHP gezwungen ;) ).
PHP bevorzuge ich, gerade weil ich damit schnell was zusammen gehackt bekomme.

Aus welchem Grund verwendet ihr lieber PHP als Java?

Stärken und Schwächen von PHP

4 Kommentare

Bei uns in der Firma gibt es „Entwickler-für-Entwickler“ Vorträge. Dabei soll man Einblick in Bereiche der IT bekommen die man eben sonst nicht hat. Diese Woche habe ich als einer der wenigen PHP Entwickler aus der technischen Abteilung meinen anderen Kollegen PHP präsentiert.

Es war ein grober Überblick über den Hintergrund, die Funktionsweise und Syntax der Sprache. Mein Ziel war es, die Vorurteile gegenüber PHP auszuräumen, also habe ich vor allem die objektorientierte Sytax von PHP präsentiert.

Ich glaube kaum, dass ich jemanden der Java und .NET Entwickler von PHP „überzeugen“ konnte, aber ich hatte schon das Gefühl, mit so manchem Vorurteil aufzuräumen.

Zuletzt gab es noch einen Überblick über die Schwächen und Stärken der Sprache, den ich im Folgenden nun etwas ausführlicher Kommentieren möchte.

Ehrlich gesagt ist es schwer die einzelnen Punkte absolut als Stärke oder Schwäche von PHP zu bezeichnen, es ist meistens beides gleichzeitig, eben worauf man bei einem Projekt wert legt:

Die meistgenannte und eindeutigsten Schwäche von PHP ist die Geschwindigkeit oder eher die Langsamkeit. Im Vergleich zu anderen Sprachen soll sie deutlich langsamer sein. Ich habe es noch nie gemessen, aber ich bezweifle es nicht, schließlich muss jede einzelne PHP Datei vor jeder Ausführung interpretiert werden.
Mittlerweile gibt es Code Caches, die ohne großen Aufwand „angeschaltet“ werden können und eine Anwendung beschleunigen.
Seit neustem gibt es ja auch HipHop für PHP, aber das Konzept find ich irgendwie seltsam. Jemand von meinen Kollegen meinte, dass man damit PHP Entwickler einstellen könnte, um C++ Code zu produzieren. :)
Mich wundert vor allem, das so große Anwendungen wie „Facebook“ und „Magento“ auf PHP aufsetzen und damit derart erfolgreich sind. PHP kann also nicht so langsam sein.

Die große Stärke von PHP ist die leichte Erlernbarkeit. Bei meinen Recherchen habe ich folgende Auflösung der Abkürzung PHP gefunden: „People Hate Perl“. Fand ich gut, den Spruch, denn mit Perl kann ich mich nicht anfreunden. ;)
Natürlich sind auch andere Sprachen leicht erlernbar, aber PHP hat sich als interpretierte Sprache extrem gut durchgesetzt [Quelle].
Gleichzeitig ist diese „Stärke“ auch ein Schwäche: man trifft viel zu oft auf Code der einfach gruselig ist. Jeder hat mal solchen Code als Anfänger geschrieben, aber ein Anfänger greift eben eher zu PHP als zu einer anderen Sprache.

Auch ziemlich super finde ich in diesem Rahmen, dass diese eine Sprache für OOP, Skripte und Templates verwendet werden kann. Das heißt, man lernt nur eine Sprache. Smarty, JSPs (für Java) und sonstige separaten Templatesprachen gehn mir auf die Nerven.

Die nächste ähnliche Stärke und Schwäche ist die relativ große Community. Man findet schnell Antwort auf Probleme und auch die Sprache wird stetig weiterentwickelt. Übrigens sehe ich mittlerweile das Zend Framework als ein Teil von PHP, welches eigentlich fast schon als eigene „Stärke“ von PHP durchgehen könnte.
Die gleichzeitige Schwäche ist (ähnlich wie beim vorherigen Punkt), dass oft Code veröffentlicht wird, der im Sinne des „CCD“ schlecht ist. Aber meiner Meinung nach schützt eine „Typsichere“ oder noch sonst so tolle Sprache nicht vor schlechtem Code.

Aufgrund der zwei letzten Punkte, ist PHP eine der Sprachen, die so gut wie bei jedem Webhoster angeboten wird. Daneben gibt es noch eine Menge Freehoster, die das Erlernen der Sprache weiter unterstützen.

Wann also sollte bzw. kann man PHP verwenden?
Ich denke, gerade die letzten Punkte zeigen, dass PHP vor allem bei kleiner Projekten zu einem einfachen und schnellen Ergebnis führen. Kleinere Web-Tools würde ich auf jeden Fall in PHP umsetzen (natürlich auch weil ich es schon erlernt habe) und bei größeren Projekten nur dann, wenn das Budget stark begrenzt ist oder ich eine breite Masse erreichen möchte (Top-Beispiel: Magento).

Ansonsten würde ich mir auf jeden Fall mal andere Sprachen anschauen!
Was ich momentan zum Beispiel an Java cool finde, ist das in Java verwendbare GWT. Es ist einfach umwerfend, wie mit reinem Java Code eine komplette Webanwendung mit AJAX Unterstützung geschrieben werden kann!

Objekte dynamisch instantiieren

5 Kommentare

Gestern bin ich auf das Problem gestoßen, dass ich Objekte nicht dynamisch instantiieren kann, so ähnlich wie es bei Funktionen und Methoden mit „call_user_func_array“ funktioniert.

Also hab ich eine eigene Funktion geschrieben, die den Klassennamen und ein Array aller Parameter übergeben bekommt. Daraus wird dann der Codeschnipsel erzeugt, der das Objekt erstellt. Dieser Codeschnipsel wird dann mit eval ausgeführt und das neue Objekt zurückgegeben.
Das ganze sieht dann so aus:

function createInstance($className, array $arguments = null) {
	if ($arguments == null) {
		$arguments = array();
	}
	
	// generate instantiate code
	$instantiateCode = '$object = new '.$className.'(';
	if (sizeof($arguments) > 0) {
		foreach($arguments AS $key => $arg) {
			$instantiateCode .= '$arguments["'.$key.'"], ';
		}
		$instantiateCode = preg_replace('/, $/', ');', $instantiateCode);
	} else {
		$instantiateCode .= ');';
	}
	
	// instantiate and return object
	eval($instantiateCode);
	return $object;
}

Falls jemand eine coolere Idee hat, dann her damit. :)

Der Anwendungszweck ist übrigens folgender:
Ich hab eine Library mit der ich gewisse Basisfunktionalitäten anbiete. Wenn jemand nun etwas verändern möchte, ohne die Updatefähigkeit zu verlieren, erstellt er eine neue Klasse mit der neuen Logik und lässt diese von der entsprechende Standardklasse erben. Damit die neue Logik jetzt auch an allen anderen Stellen im Code verwendet wird, müsste man überall den neuen Klassennamen eintragen, das will aber keiner.
Also hab ich die genannte „createInstance()“ Methode gebaut, die vor dem instantiieren überprüft ob eine Klasse mit dem Präfix „Custom_“ existiert. Wenn dem so ist, wird das Objekt der Kindklasse erzeugt. (Das Präfix muss vorher definiert sein.)

Im MediaWiki Seiten für alle freischalten

Hinterlasse einen Kommentar

Momentan mach ich grad wieder was für das interne Wiki und dabei bin ich auf das Problem gestoßen, dass die geschriebene SpecialPage nicht ohne User Authentication angesprochen werden konnte. Ist im Normalfall ja auch nicht erwünscht, nur in meinem Fall war es der Weg den ich gehen wollte.
Ich hätte jedoch nicht gedacht, dass es so schwer herauszufinden ist, wie das geht. Vielleicht hab ich auch einfach nur die falschen Suchbegriffe verwendet. Hier also für alle die mal auch auf das Problem stoßen, so wird es gelöst:

$wgWhitelistRead[] = "Spezial:MySpecialPage";

Dieser Code muss so in das Setup Skript der Spezial Seite eingefügt werden, natürlich mit dem entsprechenden Namen der Page.

Vielleicht gibt es noch eine Lösung, wie es über das Rechtesystem geht und man es damit eben „genauer“ machen kann, aber dazu hab ich leider nichts gefunden. Vielleicht mag ja noch jemand den Artikel über ein Kommentar ergänzen.

Ist ein String ein Objekt in PHP?

Hinterlasse einen Kommentar

Gerade gesehen, dass jemand mit der Suche nach „strings sind in php 5 objekte wie in java“ auf meinem Blog gelandet ist. Ich war mir auf Anhieb sicher, dass in PHP Strings keine Objekte sind, hab aber bisschen gebraucht, um auch wieder genau zu wissen, warum das so ist bzw. wie ich das beweisen kann.

1. Ein String ist ein Skalar – also ein „einfacher“ Wert oder besser: Eine Variable die nur einen Wert enthält. In Java Beispielsweise enthält ein String Objekt auch weitere Werte.
In PHP kann man mit „is_scalar“ überprüfen, ob eine Variable ein Skalar ist: ^^

$string = "hello world";
var_dump(is_scalar($string)); // bool(true)

2. Über einen String kann man keine Methode aufrufen – dies geht aber zum Beispiel in Java:

System.out.println("hello world".length()); //11

3. Dieser Punkt hängt zusammen mit Punkt 2: In PHP gibt es keine String Klasse.
$s = new String(); führt zu einem fatal error: Class ‚String‘ not found.

So, ich glaube das sollten genug Beweise gewesen sein.

Noch eine nachträgliche Anmerkung:
Anfangs wollte ich diese Tatsache beweisen indem ich ein Objekt einer Methode mitgebe, darin einen Wert ändere und nach der Methode zeige, dass sich das Objekt geändert hat. Das gleiche wollte ich dann noch mal mit einem String ausprobieren und dann zeigen, dass sich dieser nicht verändert hätte.

Bei diesem Vorgehen gibt es aber einen Denkfehler: Objekte werden verändert, Strings werden überschrieben! Wenn man in PHP ein Objekt einer Methode übergibt, es überschreibt und dann verändert, hat sich an dem ursprünglichen Objekt genauso wenig getan wie bei einem String.

Auch in Java ist es nicht viel anders: Die String-Klasse und damit auch String-Objekte sind „immutable“ (unveränderlich). Gibt man einen String an eine Methode weiter, kann diese ihn nicht verändern sondern höchstens überschreiben. Davon bleibt aber der ursprüngliche String unberührt.
Verändern kann man ein Objekt nur über Methoden oder public Properties. (Reflection ausgenommen.)

Um Strings durch Methoden doch „indirekt“ zu verändern, kann man diese in PHP als Referenz übergeben:

$s = "";
modify($s);
echo $s; //hello world
function modify(&$s){
    $s = "hello world";
}

In Java gibt es (meines Wissens nach) keine Referenzen!

Warum PHP?

5 Kommentare

Diese Frage habe ich mir letztens gestellt, nach dem ich einige Kritiken über PHP gelesen habe.
Zum Beispiel ist PHP keine echte Objektorientierte Programmiersprache und wird es auch nicht sein, die wahre Stärke von PHP ist das „Templating“ / erstellen von HTML usw.
Naja, an dem Tag war ich auf jeden Fall etwas deprimiert, weil ich PHP doch irgendwo gern gewonnen hab.

Trotz der Argumente dagegen, ist PHP immer noch eine der verbreitetsten Programmiersprachen. Nicht das damit diese Sprache automatisch „gut“ ist, aber das hat schon mal einen gewissen „Community“ Vorteil.

Das wichtigste Argument FÜR PHP ist meiner Meinung nach die grundlegende Einfachheit:
– man kapiert schnell, wie aus dem Code das Ergebnis wird
– man kann auch mit wenig Kenntnissen mal was zusammen stricken

Naja und Einfachheit hat schon immer seinen Reiz. Siehe zum Beispiel das KISS Prinzip: „Keep it simple, stupid“. Ein Prinzip auf das zum Beispiel auch Apple großen Wert legt und damit Erfolg hat.
Genau das ist es, was so eine Sprache verbreitet macht und den ein oder anderen User dann auch mal dazu anregt PHP und CCD unter einen Hut zu bringen.

Mein Fazit – auch wenn PHP nicht die leistungsfähigste, schönste und eleganteste Sprache ist – es macht meistens einfach Spaß damit zu programmieren.
Cheers.

Older Entries