За последние 24 часа нас посетили 22192 программиста и 1162 робота. Сейчас ищут 353 программиста ...

PHP. Глюки...

Тема в разделе "Прочие вопросы по PHP", создана пользователем Chushkin, 25 ноя 2016.

  1. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Обожаю линуксоидов!
    Регулярно дают повод пнуть их. :D

    Глюк array_unique().
    v5.6.18
    PHP:
    1. $m1 = [[2], [1=>3], [1=>3], [1=>3]];
    2. var_dump(array_unique($m1, SORT_REGULAR));
    3. // результат: [0=>[2], 1=>[1=>3], 3=>[1=>3]]
    4. // д.б.: [0=>[2], 1=>[1=>3]];
     
    denis01 и igordata нравится это.
  2. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Забавно. Сейчас протестил, этот глюк есть по всей пятой ветке. А вот в седьмой уже исправлен.
     
  3. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Обожаю линуксоидов! Регулярно дают повод пнуть их.
    Глюк pathinfo()
    PHP v7.1.10 (но был всегда)
    PHP:
    1. $name = 'dir1/dir2/hm.txt/'; // это каталог
    2. var_dump(pathinfo($name, PATHINFO_DIRNAME), dirname($name)); // выдаст "dir1/dir2/"
     
    mahmuzar нравится это.
  4. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Обожаю линуксоидов! Регулярно дают повод пнуть их.
    Глюк strtotime()
    PHP v7.2.11
    PHP:
    1. $time = strtotime('2019-01-31 00:00:00');
    2.   date('Y-m-d H:i:s', strtotime('1 month', $time)), // string(19) "2019-03-03 00:00:00"
    3.   date('Y-m-d H:i:s', strtotime('3 month', $time))  // string(19) "2019-05-01 00:00:00"
    4. );
    Похоже на алгоритм, типа:
    находится первый день искомого месяца и к нему прибавляется число дней в текущем месяце.
     
    artoodetoo и [vs] нравится это.
  5. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Обожаю линуксоидов! Регулярно дают повод пнуть их.
    Глюк возведения в степень.
    PHP v7.3.4

    PHP:
    1. // Глюк-с...
    2. var_dump(-1 ** 2, (-1) ** 2); // -1 | 1
    3. // Глюк-с с float
    4. var_dump(-1.5 ** 2.5,  (-1.5) ** 2.5); // -2.75567596063108 | NAN
     
  6. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    @Chushkin в первой строке нет глюков, во второй NaN реально похож на глюк
     
  7. brevis

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

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Случай с NAN представлен в примерах доки:
    PHP:
    1. echo pow(-1, 5.5); // PHP >=5.2.2: NAN
    Так как возведение отрицательного числа в дробную степень даст комплексное число.
     
  8. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Вы не поняли в чём глюк. :(
    Первое и второе выражения "вообще" идентичные, но в ПХП нет. В этом и глюк. Конкретные значения не важны (в данном случае), но должны быть идентичны.
     
  9. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Это вы не поняли, почему это не глюк. Вообще не идентичные.
     
  10. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    @Chushkin
     
  11. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Это не глюк, а особенность поскольку в документации нет отдельного приоритета для "унарного минуса".
     
    Chushkin нравится это.
  12. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Т.е вы хотите сказать, что -1 и (-1) не идентичны?
     
  13. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    -(1**2) и (-1)**2 не идентичны.
     
  14. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    О, дошло.
    Фактически "-1 ** 2" будет эквивалентно "-(1 ** 2)".

    Беру свои слова обратно. Это действительно особенность.
     
  15. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    -1 это по-сути 0-1 и вычисляется в соответствии с математическим порядком.
    0-1**2
     
  16. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Обожаю линуксоидов! Регулярно дают повод пнуть их.
    Глюк strtotime()
    PHP v7.3.4
    PHP:
    1. $time = strtotime('2019-10-31 01:00:00');
    2.     date('Y-m-d H:i:s', strtotime('-1 month', strtotime('2019-10-30 01:00:00'))), // 2019-09-30 01:00:00
    3.     date('Y-m-d H:i:s', strtotime('-1 month', strtotime('2019-10-31 01:00:00')))  // 2019-10-01 01:00:00 (!)
    4. );
    Это ... вообще бред сивой кобылы. :(
    п.с. Выше уже было показано, что strtotime() нельзя использовать для интервалов.
     
  17. brevis

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

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    DateTime тоже так работает. Даты 2019-09-31 не бывает. Наверное он возвращает первую следующую корректную.
    31 января + 1 месяц наверное тебя тоже порадует :)
     
  18. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Так. Где глюк то? Очередной повод написать "Обожаю линуксоидов! Регулярно дают повод пнуть их.". Не больше. Всё он считает как надо.
    --- Добавлено ---
    Если у тебя были какие-то другие ожидания, то это, в принципе, чисто твои проблемы, а не пыха.
     
    artoodetoo нравится это.
  19. brevis

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

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Все никак не улавливаю связь этой фразы с "глюками". Это какой-то очень тонкий юмор? Или просто комплексы.
     
  20. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Это что-то очень личное.