ФорумПрограммированиеPHP для идиотов → Что Я, %username% ненавижу в ПХП

Что Я, %username% ненавижу в ПХП

  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 7 апреля 2010 г. 11:02, спустя 19 минут 10 секунд

    PHP-FPM/PHP 5.3.2-dev/Ubuntu 9.10 (32) и PHP-FPM/PHP 5.2.10/FreeBSD 6.3 (32)

    float(2147483648)
    int(-2147483648)
    {+++22+++} я о том, что винда тут не причем
    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 7 апреля 2010 г. 11:06, спустя 4 минуты 33 секунды


    PHP-FPM/PHP 5.3.2-dev/Ubuntu 9.10 (32) и PHP-FPM/PHP 5.2.10/FreeBSD 6.3 (32)

    float(2147483648)
    int(-2147483648)
    {+++22+++} я о том, что винда тут не причем
    32 битки все подвержены, пхп хуево с типами нативными работает, я в начале этой темы писал об этом)
    Сапожник без сапог
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 7 апреля 2010 г. 11:10, спустя 3 минуты 19 секунд

    Kubuntu 9.10 x64
    int(2147483648)
    int(2147483648)


    Чтобы переполнить 64 бита =) :
    $x = intval("8") * 1024 * 1024 * 1024 * 1024 * 1024 * 1024;
    var_dump($x, intval($x));

    /*
    float(9.22337203685E+18)
    int(-9223372036854775808)
    */

    Происходит так, так как переполняется значение переменной, php улавливает тенденцию и приводит инт к числу с плавающей точкой. Значение инта в си всегда зависело от архитектуры/ос, об этом пишут во всех учебниках по си, поэтому в 32битной оси инт 32 бита, в 16битной 16, в 64 - 64бита, почему за основу инта php разработчики взяли именно int из си, а не long например, который всегда 32 бита куй знает.
    При переводе из флоата в инт пхп просто тупо копирует значение до запятой, без проверки на переполнение, а старший бит в инте определяет знак, потому, так как еденичку в старший бит записало, значение становится отрицательным.
    Как-то так, все просто до безобразия =)
    Work, buy, consume, die
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 7 апреля 2010 г. 11:13, спустя 2 минуты 47 секунд


    In [1]: x = int("2") * 1024 * 1024 * 1024

    In [2]: x
    Out[2]: 2147483648L

    In [3]: int(x)
    Out[3]: 2147483648L
    adw/0
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 7 апреля 2010 г. 11:15, спустя 2 минуты 37 секунд

    adw0rd, а ты пайтон на разных платформах тестил или на одной? ;)
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 7 апреля 2010 г. 11:21, спустя 5 минут 23 секунды

    Думаешь есть разница?) {+++23+++} 399999999999999 - 399999999999998
    http://www.codinghorror.com/blog/2009/05/why-do-computers-suck-at-math.html {+++52+++}
    In [4]: 399999999999999 - 399999999999998
    Out[4]: 1L
    adw/0
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 7 апреля 2010 г. 11:29, спустя 8 минут 46 секунд

    я лошара, и низнаю си, инт тут непричем, это оптимизация по 64 битные системы (причем только никсы, в винде 32 бита инт в php)
    Work, buy, consume, die
  • relictx

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 7 апреля 2010 г. 12:06, спустя 36 минут 53 секунды

    А мне не нравится функция date тем, что в виндовых ос дата начинается с 1970 года, а в уникс системах как надо. Хотя это навернамана виндовс больше говно, чем пэхэпэ.
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 8 апреля 2010 г. 14:03, спустя 1 день 1 час 56 минут

    а с чего надо в уникс системах?
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 26 мая 2010 г. 7:47, спустя 47 дней 17 часов 43 минуты

    жаль, что так низя:
    $foo = ($r = $this->getRequest())->post('foo');
    $bar = $r->post('bar');
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 26 мая 2010 г. 8:35, спустя 48 минут 1 секунду

    Абырвалг, твой пример не из ряда вон простой, а вот так нельзя - ПИЗДЕЦ ЖАЛЬ

    echo explode(",", "1,2,3,4,5")[0];
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 26 мая 2010 г. 8:36, спустя 1 минуту 23 секунды

    Ну это да, это уже обсуждали на одной из первых страниц. Если массив не ассоциативный - можно list использовать.
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 26 мая 2010 г. 8:46, спустя 10 минут 10 секунд


    Ну это да, это уже обсуждали на одной из первых страниц. Если массив не ассоциативный - можно list использовать.
    что использовать я знаю :)

    зы: лист можно и для ассоциативного юзать, если невано какой результат получишь)
    Сапожник без сапог
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 26 мая 2010 г. 8:55, спустя 8 минут 36 секунд

    что в виндовых ос дата начинается с 1970 года

    это смотря где, вот у меня на работе она начинается с 1899 года ;)
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 15 июня 2010 г. 4:16, спустя 19 дней 19 часов 21 минуту

    class A
    {
    public static function c()
    {
    echo 'c';
    }
    }

    $h = array('A', 'c');
    $h();

    хуй там, только строки так можно… {+++76+++} и $h = 'A::c'; низя

Пожалуйста, авторизуйтесь, чтобы написать комментарий!