ФорумПрограммированиеPHP для идиотов → поддержка замыканий

поддержка замыканий

  • kostyl

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

    Spritz Авг. 21, 2010, 5:26 п.п.

    Стоит версия 5.3.2
    Прочитав вики по замыканиям (http://wiki.php.net/rfc/closures) решил попробовать.
    Обнаружил, что вопреки вики ReflectionMethod не поддерживает getClosure() а также при использовании замыкания в методе объекта туда не импортируется автоматом $this (Fatal error: Using $this when not in object context), что приводит к не видимости области видимости класса,т.е. не возможности использовать не публичные методы и свойства
    Чё бля за херня?
  • kostyl

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

    Spritz Авг. 21, 2010, 5:40 п.п., спустя 13 минут 35 секунд

    и static function() use () не пашет…
    Спустя 102 сек.
    а теперь я еще время померал:
    в среднем, для моей задачи
    Closure: 4.2417922019958E-5
    Call user func: 3.0434999465942E-5

    Вывод - опен сорс - гавно
  • phpdude

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

    Spritz Авг. 21, 2010, 8:06 п.п., спустя 2 часа 26 минут 33 секунды

    куски кода давай а не мысли свои
    Сапожник без сапог
  • kostyl

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

    Spritz Авг. 21, 2010, 8:42 п.п., спустя 35 минут 9 секунд

    держи, последнее что было… Это я хотел свой бб парсер переписать с call_user_func на closure, думал будет бытрее да и closure попробовать… Там два конечных автомата, верхний старый, ниже новый и начало парсера, в самом низу типа тесты
  • phpdude

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

    Spritz Авг. 21, 2010, 8:46 п.п., спустя 4 минуты 31 секунду

    нихуя не понял.
    а теперь я еще время померал:
    в среднем, для моей задачи
    Closure: 4.2417922019958E-5
    Call user func: 3.0434999465942E-5

    ага. на 1 итерацию, молодец!

    какой нах статик клосуре? это чо ваще? :-D
    Сапожник без сапог
  • kostyl

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

    Spritz Авг. 21, 2010, 9 п.п., спустя 13 минут 33 секунды

    ага. на 1 итерацию, молодец!

    это сдернее по одному знаменателю, умнож на количество получишь такое же отношение, йоу!
    какой нах статик клосуре? это чо ваще? :-D

    а хрен знает, я смотрю по вики, а где еще можно я фиг знаю где:
    Because not all closures defined in class methods need $this, it is possible to declare a lambda function to be static:

         class Example {
    public function doSomething () {
    $x = 4;
    $closure = static function ($y) use ($x) {
    return $x + $y;
    };
    return $closure (6);
    }
    }


    In this case, $this is not available inside the closure. This may save a lot of memory if saves many closures that originated in longer needed objects.
  • phpdude

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

    Spritz Авг. 21, 2010, 9:02 п.п., спустя 2 минуты 35 секунд

    а в каком коде у тебя ругается?
    Сапожник без сапог
  • kostyl

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

    Spritz Авг. 21, 2010, 9:23 п.п., спустя 21 минуту 10 секунд

    Меня интересует это:
    	private function _startBb()
    {
    $parser = $this;
    $closure = function($char) use ($parser) {
    $a = 1 + 1;
    //$parser->_a = 1 + 1;
    //echo $parser->_a;
    };

    return $closure;
    }


    Судя из вики, я так понял $this можно не передавть как тут я написал, а сразу использовать, но если там написать вместо $parser $this->_a как бы к приватной (она был приватной) но нифига типа $this не катит, а я думал будет катить…
  • phpdude

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

    Spritz Авг. 21, 2010, 10:04 п.п., спустя 40 минут 16 секунд

    kostyl, нет, нельзя приватные конечно менять. их не видно снаружи
    Сапожник без сапог
  • kostyl

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

    Spritz Авг. 24, 2010, 2:43 д.п., спустя 2 дня 4 часа 39 минут

    еще натолкнулся на такую штуку Exception with message "Serialization of 'Closure' is not allowed". Прикольно!! ))

    Но я к чему пишу. Меня всё таки мучила проблема и я решил сделать чуть получше тесты. Суть была в том что из старых тестов вызов замыкания проигрывал вызову пользовательской функции. Какой же я был лох.
    Я еще добавил вызов непосредственно метода у объекта и опять начал мерять. Менял код добавлял удалял и наконец понял, что разница между вызовами этими тремя способами настолько мала, что она проигрывает разницам в вызовах isset vs empty в моём коде, а так как у меня были немного разные функционалы я привёл всё к общему знаменателю, максимально сократил код в вызываемых методах (удалил его нахуй) и получил довольно логичную картину:
    большинство опытов дают такие средние числа:
    Call closure: 0.22893398761749
    Call user func: 0.2867635011673
    Standart object method call: 0.23807461261749

    То есть само быстро - вызов обычной функции, чуть дольше вызов метода объекта и еще дольше пользовательский вызов… Надо бля как нить открыть исходы пыха и бля хоть раз глянуть
    Спустя 113 сек.
    ну это хуйня, то что я хотел всё равно не поддерживается…
  • kostyl

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

    Spritz Авг. 24, 2010, 2:55 д.п., спустя 12 минут 8 секунд

    короче вывод:
    Половину вики по замыканиям я не так понял
    Вторая половина вики по замыканиям не работает
    (написал именно "вики по замыканиям" потому, что когда я без этих слов прочитал и вспомнил что есть имя Вика, то чуть не уссался от ржачки )

    и самый главный вывод, в моей задаче похуй, что юзать.

  • phpdude

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

    Spritz Авг. 24, 2010, 6:28 д.п., спустя 3 часа 33 минуты 8 секунд

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

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

    Spritz Авг. 24, 2010, 11:47 д.п., спустя 5 часов 18 минут 40 секунд


    а чо ты хател, технология новая для пхп, качество реализации пхп ты сам понимаешь - все норм, пару лет на говне поездим, потом можно хвастаться им :)
    поздно будет
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

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

    Spritz Авг. 24, 2010, 11:49 д.п., спустя 1 минуту 36 секунд

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

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