Fucked by PHP #1: Integer nach Boolean Cast

Tags:

Yay, tolle neue Rubrik, denn heute hab ich wieder mal was über PHP gelernt. Auf die schmerzhafte Art.

Kennt ihr eine solche Struktur?

class Article
{
    public function getTags() { /* ... */ }
    public function countTags() { /* ... */ }
    public function hasTags() { /* ... */ }
}

Nun, ich neige dazu, (aus Faulheit) für die hasTags()-Methode folgendes zu schreiben...

public function hasTags()
{
    return (bool)$this->countTags();
}

Das hat bisher auch wunderbar geklappt, doch heute bin ich auf die Fresse geflogen. Denn PHPs integer nach bool Cast behandelt negative Zahlen als true. Also nur 0 ist false, alle anderen Zahlen sind true1). Nach meiner Logik waren postive Zahlen true, die Null und negative Zahlen false. Diese doofen negativen Zahlen...

Zur Erklärung: Da meine countXYZ()-Methode nicht Tags, sondern freie Sitzplätze eines Trips zählte, konnte dort auch eine negative Zahl rauskommen (wenn der Trip bereits mehr Passagiere hatte, als das Limit zulies (Admins dürfen überbuchen)). Danach hat meine hasXYZ()-Methode versagt. FAIL.

Folgendes hilft:

public function hasTags()
{
    return $this->countTags() > 0;
}

Kennt ihr Hotfixes?

1) PHP Manual

Ähnliche Artikel

Kommentare