LINUX.ORG.RU

Пустая строка, false и 0 на Perl и PHP

 , , isset, ,


0

1

Как объяснить столь странное (во всяком случае для меня, как для Perl'иста) поведение PHP?

~$ php <<<'<?php $a=""; $b=($a || 0); print ">>$b<<\n"; ?>'
>><<
~$ perl -e '$a=""; $b=($a || 0); print ">>$b<<\n"'
>>0<<

При этом:

~$ php <<<'<?php $a=""; if ($a == false) print "hello\n"; ?>'
hello

Почему конструкция ($a || 0) на PHP даёт не предсказуемый результат 0, а пустую строку?

Спасибо!

★★★★★

Используй строгое сравнение ===

duck
()
Ответ на: комментарий от goingUp

Спасибо! Понял теперь, где собака порылась.

Мда, тут вам не Perl :)

php -r '$a=0; $a=$a||7; print "$a\n";'
1
php -r '$a=0; $a=$a || ""; print "$a\n";'

php -r '$a=0; $a=$a || 0; print "$a\n";'

DRVTiny ★★★★★
() автор топика

Думаю тебе здесь нужен не || а ?:

php -r 'var_dump("" ?: 0);'
int(0)

kiotoze ★★★★
()
Ответ на: Вспомнилось... от gh0stwizard

Здесь же логика Perl'а, она хоть и не всегда очевидна, но вполне предсказуема.

Zero but true :)

DRVTiny ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.