Facebook
Twitter
Google+
Kommentare
22

MeinPHP: Wer baut das fieseste Skript?

Am letzten Freitag ging was schief mit unseren Blogartikel. Wir hatten ausversehen zwei an einem Tag veröffentlicht und eigentlich machen wir das ja nicht. Aus diesem Grund habe ich diesen Artikel hier auch wieder rausgenommen und auf heute verschoben. Wundert euch also nicht, wenn er euch bekannt vorkommt.

Wir hatten im Dezember ja schon mal eine Folge MeinPHP auf die Leser losgelassen. Bei MeinPHP geht es eigentlich darum eine Aufgabe, die wir stellen möglichst elegant zu lösen und in seinem Forum, Blog oder woanders zu Posten. Ich habe lange überlegt, was man als nächste Herausforderung machen könnte. Und heute kam mir endlich die Idee.

PHP ist meine bevorzugte Sprache, wir ihr ja vielleicht wisst, nichtsdestotrotz kann man echt fiese Sachen damit bauen und das schlimmste daran ist, man findet diese fiesen Sachen immer wieder in produktiv eingesetzten Tools. Und warum? Weil man es kann! (Danke Olaf für die Aussage). Aus diesem Grund möchte ich heute einen kleinen Contest ausschreiben. Wer kann das fieseste Skript basteln?

Meine Theorie ist ja, dass in einem wirklich schrecklichen Programm mindesten ein goto, ein catchable fatal error, ein class_alias, ein $$ und vielleicht ein wenig Reflection dabei sein muss. PHP 5.3 hat echt ein paar schöne „Monster“ mitgebracht, die in den falschen Händen schon ganz schön Schaden anrichten können. Ich selbst werde mich auch daran probieren, habe da auch schon ein paar Ideen.

Anders als beim letzen Mal werden wir keine konkrete Aufgabe aussuchen, seid also kreativ und versucht euch selbst zu schocken. Ich denke mal, dass so zwei Wochen reichen sollten, um was wirklich gemeines zu zaubern. Solange habt ihr also Zeit euch was auszudenken. Wem was eingefallen ist, der kann es mir gerne per E-Mail schicken oder am besten einfach bei sich im Blog zu posten. Nach dem Ablauf der Frist werden wir dann das beste schrecklichste Skript kühren und den Titel „PHP Teufel“ verleihen.

Oft hilft es übrigens auch sich den eigenen alten Code anzuschauen. Zumindest bei mir. Viel Spaß also mit der Aufgabe, ich werde ihn haben.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

22 Comments

  1. Wenn ich mein alten Code anschaue bekomme ich entweder eine Gänsehaut oder einen Brechreiz.

    Des öfteren schmeis ich mich auch in die Ecke und krümme mich vor Schmerzen, die Lachmuskeln tun nach ner Stunde immer so weh.

    Und so ab und an fange ich an wild rumzuzucken.

    Ihr seht es ist nicht ganz ungefährlich. Drum , bevor Ihr euren alten Code anschaut, 5 wichtige und weniger wichtige Regeln:

    1) Immer in Begleitung eines Erwachsenen, den Code niemals alleine anschauen

    2) Stellt sich der Zappelfillip ein ist das ein Anzeichen für eine Überhitzung der Synapsen beim Versuch den Code zu verstehen. Abhilfe: Kopf in die Kloschüssel und kräftig spülen

    3) Fängt der Code an nach einer zweiten Chance zu betteln: Sofort delete taste drücken

    4) Beim einschleichen des Gedankens, der Code sei doch gar nicht sooo schlecht, ein kleines Refactoring und der is wieder frisch…. Renn so schnell du kannst

    5) Bist du in der Arbeit überlege dir schon mal ein paar Ausreden für den Fall das der Chef vorbeikommt und dich an die letzte Gehaltserhöhung erinnert

    Und nun steht dem Titel „PHP Teufel“ nichts mehr im Weg.

    Reply
  2. Ich glaub, das schlimmste was ich bisher gesehen habe war xml gepaart mit eval(). Mann sollte ja im xml php verwenden können. *schauder*

    Reply
  3. @Dominik: Oja ich glaube da geht es noch viel fieser 🙂 Obwohl eval() schon auch auf der Liste der gefährlichen Ausdrücke steht. Das Zweite kann man ja in fast jeder Sprache verbocken, oder?

    Reply
  4. Nils, meinst du fies im sinne von mach alles falsch was geht und es funktioniert trotzdem ?

    Oder fies im sinne von „You are not expected to understand the following code“.

    Was letzteres angeht hat manual mit seiner variablen variablen variablen variable sicher den vogel abgeschossen 🙂

    Ludwig

    Reply
  5. @Cem Derin: Reflections an sich sind cool, vor allem im Bereich Unit-Testing sehr gut zu gebrauchen! Aber man kann auch ne ganze Klassenstruktur über den haufen werfen:

    class C {
    private $__privateVar = 'v';
    private function __privateMethod() { return 'm'; }
    }
    $c = new C();

    // echo $c->__privateVar; oder
    // echo $c->__privateMethod();
    // geht natürlich aus guten gründen nicht

    $p = new ReflectionProperty('C', '__privateVar');
    $p->setAccessible();
    echo $c->__privateVar;

    Das ganze ist ja nicht sooo schlim auf den ersten Blick. Wenn du aber bedenkst, dass man so in seinen alten Klassen (die vielleicht etwas „schlechter“ gecodet sind) rumpfuschen und rummurksen kann, wird das ganze ziemlich hässlich =)

    Reply
  6. Das man mit Reflection auch Mist bauen kann rührt in erster Linie daher, dass man mit jedem Sprachkonstrukt Mist bauen kann 😉

    Es gibt nicht erst seit gestern den Ansatz reflexiver Programmierung was ich insbesondere in Bezug auf Metaprogrammierung (im Sinne von sich selbst erstellender Programme) höchst interessant finde.

    Aber selbst wenn es nur für Unit-Testing verwendet wird und auch nur diesen Zweck hätte, warum wird es in Zusammenhang mit „schlechtem Code“ erwähnt? Das war meine ursprüngliche Frage …

    Reply
  7. Pingback: ITWS
  8. Nur ein kleines Fragment aus Code, den hier jemand 1:1 aus COBOL portiert hat:

    try {
    # diverse Datenbankzugriffe via Propel-basierter Klassen
    # ca. 30 Zeilen
    } catch (MyOwnException $exception) {}

    Das sieht mir nach einem klaren Exceptions-als-GOTO-Ersatz aus …

    Reply
  9. class A {}
    class B extends A {
    public function __construct() {
    $args = func_get_args();
    call_user_func_array(array($this, „parent::__construct“), $args);
    }
    }
    class C extends B {}
    $instance = new C();

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen