V PHP lze porovnávat jakékoliv typy, což je popsáno v dokumentaci. Když jsem tabulku podle zdrojových kódů sestavil, tak lidem přišla nějaká divná hlavně proto, že se v ní některé typy opakují. Klíčem pro její pochopení je uvědomit si, že se čte shora dolů. Takže když jsou oba operandy string, porovnají se hned podle prvního řádku, když je jeden string a jeden number, tak se porovnají až podle čtvrtého řádku.
Nejzáludnější je porovnávání polí, kde jsou pravidla tato:
Z algoritmu je patrné, že pokud pole obsahují klíče v různém pořadí, tak záleží na tom, které pole se bude procházet. Člověk by čekal, že to bude vždy to vlevo, ve skutečnosti to je ale to „menší“, protože $a > $b
se ve skutečnosti vyhodnocuje jako $b < $a)
. V PHP 6 se to ale možná změní.
<?php // neexistující klíč - neporovnatelné $a = array(0); $b = array(1 => 1); var_dump($a < $b); // false var_dump($a > $b); // false // prochází se "menší" pole - paradox $a = array(0, 1); $b = array(1 => 0, 0 => 1); var_dump($a < $b); // true var_dump($a > $b); // true ?>
Z uvedených příkladů je patrné, že porovnávání polí se může chovat hodně zvláštně. I když se smíříme s neporovnatelností polí s rozdílnými klíči (která se dá pochopit), zůstává zde procházení „menšího“ pole způsobující uvedený paradox, které se navíc v PHP 6 možná změní. Pokud ke změně dojde, vznikne jiný paradox: $a < $b
nebude nutně vracet stejný výsledek jako $b > $a
.
Diskuse je zrušena z důvodu spamu.