PHP mě nepřestává překvapovat — jakubův notes – programování a vejšplechty

Píšu o:

$true = TRUE;
$false = FALSE;

printf("%s\n%s\n%s\n%s\n",
    $true++  === TRUE  ? 'TRUE++  === TRUE'  : 'TRUE++  !== TRUE',
    $true--  === TRUE  ? 'TRUE--  === TRUE'  : 'TRUE--  !== TRUE',
    $false++ === FALSE ? 'FALSE++ === FALSE' : 'FALSE++ !== FALSE',
    $false-- === FALSE ? 'FALSE-- === FALSE' : 'FALSE-- !== FALSE'
);

Hádejte, co následující kód vytiskne?

Komentáře

Znáte-li dokumentaci, není třeba hádat ;) http://php.net/operators.increment
— napsal(a) spaze (web, 21. 12. 2009, 19:04:51)
Zaprvé by bylo dobré napsat na jaké verzy PHP... (u PHP jeden nikdy neví)
Mělo by asi...
TRUE++  === TRUE
TRUE--  !== TRUE
FALSE++ === FALSE
FALSE-- !== FALSE
Ale určitě to bude...
TRUE++  === TRUE
TRUE--  === TRUE
FALSE++ === FALSE
FALSE-- === FALSE
— napsal(a) Patrik Votoček (Vrtak-CZ) (web, 21. 12. 2009, 19:05:09)
Tak toto mě opravdu nepřekvapuje, to je naprosto jasná a zdokumentovaná vlastnost jazya. Existuje desítky jiných, nepředvídatelných a nezdokumentovaných. (aspoň myslím ;)
— napsal(a) Hrach (web, 21. 12. 2009, 22:39:02)
aaaúúúúúúúúúú! :[
— napsal(a) paranoiq (30. 12. 2009, 01:07:42)
Tak tohle bych taky nečekal. Myslel jsem, že TRUE a FALSE je normální integer.
— napsal(a) Dundee (web, 14. 1. 2010, 14:37:58)
Trochu mě to překvapilo, protože jsem čekal, že PHP si to přetypuje jako v jiných případech.
Logicky to ale smysl dává.
1) Proč by si kdy inkrementoval booleanskou hodnotu.
2) Projevuje se tu logická a typová rovnost - jasně, bool můžeš pokládat za integer z logického hlediska, ale typ je to pořád jiný a inkrementaci tam ani nelze zavést.
— napsal(a) Vojtěch Vondra (web, 14. 1. 2010, 15:26:01)

Přidat komentář