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. ^^

PHP Code Shit – when code really smells

4 Kommentare

Also ich hab ja lang nichts mehr geschrieben weil ich aktuell sehr wenig mit PHP zu tun hab bzw. nur im Zusammenhang mit unserer Software Lösung (evtl. starte ich einen allgemeinen Entwickler Blog oder so .. die Idee muss noch reifen).
Auf jeden Fall sollte ich gerade Fremd-Code analysieren und bin dabei auf ein paar heftige Code-Brocken getroffen, die ich euch nicht vorenthalten möchte. *gg*

#1

$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("H");
$minute = date("i");
$seconds = date("s");
$SQL = 'INSERT INTO '.$table.' VALUES ('.$id.','.$year.','.$month.','.$day.','.$hour.','.$minute.','.$seconds.')';

..wenn’s ganz schlecht läuft, wird die Sekunde aus der nächsten Minute sein oder sogar der Monat aus dem nächsten Jahr, dann ist Ende 2012 ganz kurz wieder 1. Januar 2012. :)

#2

//DEFINE NUMBERS
$numbers[] = "1";
$numbers[] = "2";
$numbers[] = "3";
$numbers[] = "4";
$numbers[] = "5";
$numbers[] = "6";
$numbers[] = "7";
$numbers[] = "8";
$numbers[] = "9";
$numbers[] = "0";

$n = 0;
while(isset($numbers[$n])){
    // use $numbers[$n]
    $n++;
}

^^

#3

//...
$page = $template->renderHtml();

$infoColumnPos = strpos($page, '<div id="infoColumn">');
$infoColumnEnd = strpos($page, '</div>', $infoColumnPos)+6;
$infoColumnLength = $infoColumnEnd - $infoColumnPos;
$page = substr_replace($page, "", $infoColumnPos, $infoColumnLength);

echo $page;

Äh … wofür sind nochmal Templates da?

Methodenaufrufe in PHP caseinsensitiv

4 Kommentare

Vor einigen Tagen entdeckt und immer noch von diesem „Feature“ verblüfft. :)
Ohne große Worte:

class FOO{
    function bar($msg){
        echo $msg;
    }
}

$f = new foo();
$f->Bar("lol"); //Ausgabe: lol

In PHP nur noch Exceptions statt Fehlermeldungen

4 Kommentare

Du hast keine Lust mehr auf die doofen Fehlermeldungen in PHP? Dann kannst du das mit set_error_handler erreichen. Davor bitte die Doku dazu lesen!

Hier mal ein Beispiel, wie sowas aussehen könnte:

set_error_handler('throwException', E_ALL);
function throwException($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile){
    throw new ErrorException($fehlertext, $fehlercode, 0, $fehlerdatei, $fehlerzeile);
}
trigger_error("foo-bar", E_ERROR);

Übrigens erzeugt „trigger_error“ den Fehler nicht weil „trigger_error“ aufgerufen wurde, sondern weil „trigger_error“ „E_ERROR“ als zweiten Parameter nicht akzeptiert. Ein echter E_ERROR also. :)
Leider ist es (noch) nicht möglich, für jeden Fehler Typen einen eigenen Handler zu definieren um zum Beispiel E_NOTICE Fehler anders zu behandeln als E_ERROR. Als zweiten Parameter akzeptiert set_error_handler (laut Doku) nur E_ALL oder E_STRICT. Könnte mir aber gut vorstellen, dass man das irgendwie austricksen kann.
Ich habe übrigens die ErrorException Klasse gewählt, da diese auch Dateiname und Zeile akzeptiert … wenn man diese Info schon mal hat, kann man diese ja auch gleich verwenden.
Als letzten Parameter kann man in der callback Funktion noch „$errcontext“ verwenden – der Inhalt ist bei einer Exception jedoch etwas fehl am Platz.

Nun wünsch ich allen die das wollen viel Spaß, denn damit wird das PHP Standard Fehler Handling ausgehebelt. Sowas wie z.B. „$resource = @fopen($irgendEineDatei);“ funktioniert dann nämlich nicht mehr bzw. ergibt eine schöne Exception falls ein Fehler auftritt. Das ist vor allem dann nervig, wenn man fremden Code einsetzt, der sich auf solche Konstrukte verlässt.

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?

Shame on me

2 Kommentare

Hier ist er also, mein Code of Shame:

function getValue($path)
{
    return eval("return \$this->xml_config->$path;");
}

Das ist eine Methode einer Config Klasse die ein SimpleXML Objekt kapselt. Irgendwann hatte ich keine Lust mehr, die einzelnen Werte der Config sicher weiterzuleiten, also hab ich diese Methode hinzugefügt. Naja .. damit hätte ich mir das Config Objekt auch sparen können x) … *shame on me*

Der Developers Shame Day

Hinterlasse einen Kommentar

Am 3. November ist Developer Shame Day – eine Erfindung von Cem dem PHP Hacker. Ich bin dabei… mein Scham-Code ist schon in der Pipeline.

Older Entries

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.