За последние 24 часа нас посетили 20739 программистов и 1824 робота. Сейчас ищут 910 программистов ...

Непонятки с PHP при делении на нуль.

Тема в разделе "PHP для новичков", создана пользователем Sferg, 10 авг 2014.

  1. Sferg

    Sferg Новичок

    С нами с:
    9 июл 2014
    Сообщения:
    21
    Симпатии:
    0
    Здравствуйте, господа. Я совсем зелёный новичок в PHP. Учусь потихньку - не ругайтесь сильно. Ставлю эксперименты со всем тем, что на данный момент усвоил. Играючи написал код:

    Код (Text):
    1. <?php
    2. $a='e';
    3. $e=1024;
    4. $b='f';
    5. $f=2048;
    6. $c='g';
    7. $g=4096;
    8. $d='h';
    9. $h=8192;
    10. $array = array("1" => $$a, "2" => $$b, "3" => $$c, "4" => $$d);
    11. $con = "$array[1]"."$array[2]"."$array[3]"."$array[4]";
    12. $res = $con / 0;
    13. if (res == 0) {
    14.     echo "Успешно поделено на ноль!";
    15. }
    16. ?>
    Подскажите, пожалуйста, почему нет никакой ошибки? Ведь деление на нуль же... Да, конечно, в error.log есть строчка:

    Код (Text):
    1. "NOTICE: PHP message: PHP Warning: Division by zero in /home/example.com/www/index.php on line 12"
    А в ней всего лишь NOTICE и WARNING... Я думал, что FATAL ERROR будет по такому случаю, а тут ТАК всё...
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а до этого у вас значит никаких странностей нет? :D
    Ну про ноль там будет ворнинг. Но не факт, что вы его увидите, зависит от настроек уровня отображения лог-сообщений.
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Деление на нуль/ноль не вызывает короткого замыкания в процессоре. В большинстве языков эта ситуация либо:
    1) Вызывает эксепшен, не приводящий к падению чего-либо;
    2) Рассчитывает значение выражения как NaN, Undefined и тд;
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ну раз разжевали, хочется спросить:
    Что это за жесть? :D

    Код (PHP):
    1. $a='e';
    2. $e=1024;
    3. $b='f';
    4. $f=2048;
    5. $c='g';
    6. $g=4096;
    7. $d='h';
    8. $h=8192;
    9. $array = array("1" => $$a, "2" => $$b, "3" => $$c, "4" => $$d);
    10. $con = "$array[1]"."$array[2]"."$array[3]"."$array[4]"; 
     
  5. VaneS

    VaneS Активный пользователь

    С нами с:
    16 ноя 2011
    Сообщения:
    636
    Симпатии:
    4
    Адрес:
    Россия
    Ну там же написано
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    это он $$ тестил походу.
     
  7. Sferg

    Sferg Новичок

    С нами с:
    9 июл 2014
    Сообщения:
    21
    Симпатии:
    0
    Да, я проверял свои знания и в $$ (не знаю, как сие правильно называется - символическая ссылка?), и в массивах, и в конкатенации в одну строку... Но самое главное - я хотел-таки успешно поделить на нуль... Чтоб узреть что там, за гранью возможного... Навязчивая мечта, так сказать. А то учили нас, что нельзя делить на нуль. Вселенский заговор, видать, не иначе.
     
  8. VaneS

    VaneS Активный пользователь

    С нами с:
    16 ноя 2011
    Сообщения:
    636
    Симпатии:
    4
    Адрес:
    Россия
    Читайте книги по матану, сразу познаете истину!)
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Таки можно.
    1) Результат выражения будет непоределен, как ранее говорилось, NaN или Undefined;
    2) Но в пыхе нет NaN или Undefined, зато есть null, к которому сие и приводится;
    3) При выводе null конвертится в ближайшее по контексту значение, то есть в 0, а var_dump покажет вообще как false;

    Се ля ви, пых он такой.
     
  10. Sferg

    Sferg Новичок

    С нами с:
    9 июл 2014
    Сообщения:
    21
    Симпатии:
    0
    Прошу прощения, но пример ниже выводит NAN:

    Код (Text):
    1. <?php
    2. $a = acos(8);
    3. echo $a;
    4. echo "<br>";
    5. var_dump($a, is_nan($a));
    6. ?>
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    О, значит таки есть NaN для обозначения неопределенности. Ок. Круто :)
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    http://php.net/is_nan смотрите коммент, нан есть и это совершенно мистическая константа, которую невозможно получить с помощью математического выражения без функций, так что его для веб программистов нет =) в отличии от js где он на каждом углу некорректных выражений.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Потому я и не подозревал о его существовании в пыхе) Null-ы видел, NaN-ы нет, до недавнего времени.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  15. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Спасибо за ссылку :)