тесть на знание PHP

12
[Удален]
933

какие значение в переменной $bool?


$str = "asd";
$int = 0;
$bool = ($str == $int);

причину озвучу позже

ewg777
На сайте с 04.06.2007
Offline
225
#1

true.

причину озвучу позже

Уважаемый, это всё есть в мануале.

http://ru.php.net/manual/en/language.operators.comparison.php


<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true

switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
?>
[Удален]
#2

есть пример круче


$a=0;
switch ($a)
{
case ($a<100): echo 1; break;
case ($a>100): echo 2; break;
}

выведет 2

Prior
На сайте с 03.03.2008
Offline
194
#3
neolord:
есть пример круче

$a=0;
switch ($a)
{
case ($a<100): echo 1; break;
case ($a>100): echo 2; break;
}

выведет 2

Всё правильно, преобразование типов, $a>100 => FALSE, $a<100 => TRUE. FALSE соответствует нулю, TRUE - единице.

Ответы на вопрос - https://answers.net.pl
psylosss
На сайте с 23.12.2005
Offline
126
#4

Многие, не понимая правил преобразования типов, относят такие "фокусы" к недостаткам РНР

Веб-разработка. Сложные проекты. Проектирование. Проект-менеджмент. Стартапы.
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#5

MOP1, правильное сравнение

$bool = ($str === ''.$int);  

или

$bool = ((int)$str === $int);  

PHP и его работа с типами по умолчанию - мощная штука. Но приведение типов позволяет уменьшить время на отладку. Особенно если она проводится спустя какое-то время после написания кода.

Неизменность точки зрения неизменно порождает иллюзию понимания.
T.R.O.N
На сайте с 18.05.2004
Offline
314
#6

Во многих реализациях пыха, как и перла, встречал такое правило. Тип операции определяется по типу первой встреченной переменной. Но на это не стоит сильно рассчитывать.

Работа с типами и в Perl и в JS, да и в пыхе - очень удобная, а главное, избавляет от многих неудобств.

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
[Удален]
#7
Prior:
Всё правильно,

А я не понял :(. Можно пояснить?

$a<100 => TRUE

Т.е. должна сработать первая строка switch (case ($a<100): echo 1; break;)

psylosss
На сайте с 23.12.2005
Offline
126
#8
SeoNizator:
А я не понял . Можно пояснить?

switch выполняет выражение после case не в том случае, если значение, записанное в case ИСТИННО. А в том случае, если оно СОВПАДАЕТ с тем, что записано после switch.

В первом case в скобках записано ($a<100). Чему равно это выражение? Оно равно true. Во втором case выражение в скобках равно false. switch сравнивает Ноль ($a=0; switch ($a)) с true (в первом case) и с false (во втором случае). Какой case сработает?

Иначе говоря, первый case выполнится в случае, если $a == ($a<100), а второй case выполнится в том случае, если $a == ($a > 100). Поскольку $a=0, то выполняется второй case (0 == false).

[Удален]
#9

Говоря по русски запись


switch ($a)
{
case ($a<100):

эквивалента


if ($a==($a<100))

и 0!=1

[Удален]
#10
psylosss:
switch выполняет выражение после case не в том случае, если значение, записанное в case ИСТИННО. А в том случае, если оно СОВПАДАЕТ с тем, что записано после switch.

Семён-семёныч... точно! Благодарю. 🍻

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий