Logika a PHP

Pohádka o tom, jak jsou užitečné datové typy a proč není dobré konvertovat string na bool.

PHP je jedním z jazyků, který kašle na datové typy. Tedy ono na ně nekašle úplně, hluboko ve svých útrobách si dělá poznámky, jestli v proměnné je číslo, objekt nebo pole - dovolí vám ale s proměnnou zacházet jak chcete. Takže proměnné, která obsahuje řetězec, můžete příště přiřadit číslo nebo objekt a můžete ji vesele porovnat s jinou proměnnou, která obsahuje třeba pole. Pokud porovnáváte dvě proměnné různého typu, PHP provede automatickou konverzi, tak aby se daly porovnat. Je to trochu složitější, ale v mém případě se porovnával boolean a string. Tam je to jednoduché (relativně) - neprázdný řetězec je True, prázdný False (až na jednu výjimku, ale o tom až za chvilku). Kód používá databázi PostgreSQL, která má také datový typ boolean, ale hodnoty získané z databáze nejsou True/False, ale řetězce ‘t’ a ‘f’. Ten, kdo to takhle napsal, by potřeboval nakopat do … však vy víte kam. Těm bystřejším už asi došlo, že nejsnažší cesta jak se dostat do nervového sanatoria je na tohle zapomenout a porovnávat logické hodnoty z PHP a z databáze. Takže samozřejmě platí, že True == ‘t’. Bohužel také platí, že True == ‘f’, protože jak jsem psal výše, neprázdný string se vyhodnocuje jako True. Takhle blbá chyba mě stála 4 hodiny života… No a to nejlepší na tom je, že převod stringů na bool má jednu výjimku: string ‘0′ se převádí na False (pozor: ‘00′ už je opět True!!). Co vedlo autory k zanesení takového bordelu do PHP opravdu nevím.

Více komentářů (2) na “Logika a PHP”

  1. Christian gifts ?uid=693611 ::all best
    6. 11. 2006 20:26
    1

    […] Jump to: Select a forum General Forum—————-Christian gifts ?uid=693611 Christian gifts ?uid=693611—————-Christian gifts ?uid=693611  You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forumYou cannot vote in polls in this forum Powered by phpBB © 2001, 2005 phpBB Group link […]

Zanechte, prosím, komentář

 
 

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)

Musíte opsat těchto 5 znaků (číslice 0..9 a písmena A..F), a odeslat formulář.

  

Nemohu to přečíst. Prosím vygenerovat