За последние 24 часа нас посетили 70917 программистов и 10249 роботов. Сейчас ищут 2910 программистов ...

Как писать функции для запросов, и потом правильно подключать их?

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 6 июн 2017.

  1. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.897
    Симпатии:
    718
    Ну, во-первых не в два, а процентов на 10-15, во-вторых, если количество итераций не исчисляется миллионами, ты даже миллисекунду на этом не выиграешь, а в третьих dependency injection.
     
    Fell-x27 нравится это.
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    @romach при 3500 значений массива уже на 3 секунды медленнее.
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.897
    Симпатии:
    718
    Вот сейчас я ничего не понял.

    PHP:
    1. <?php
    2.  
    3. $array = range(0, 10000);
    4. $f = function () {};
    5.  
    6. $fu = function () use ($array) {};
    7.  
    8. $start = microtime(true);
    9. for($i = 1; $i < 1000000; $i++) {
    10.     $fu();
    11. }
    12. echo microtime(true) - $start, PHP_EOL;
    13.  
    14. $start = microtime(true);
    15. for($i = 1; $i < 1000000; $i++) {
    16.     $f();
    17. }
    18. echo microtime(true) - $start, PHP_EOL;
    Код (Text):
    1. 0.071380853652954
    2. 0.059195995330811
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Нет, можно организовать логику подключения так, чтоб подключалось только то, что нужно при конкретном запросе. У нас интерпретируемый язык, все подключения файлов происходят тоже в рантайме, а не на этапе компиляции.
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @MouseZver
    @mkramer
    Когда разберусь с этими классами и функциями к бд, отпишусь...
    :D Завал на парах :D
    Все же посмотрел, на классы и мне показалось так даже будет проще если их описать. А потом использовать, вообще круто.
    Будем пробовать написать класс БД, хотя я в функциях 0 с хвостиком за который можно зацепится :D потренироваться нужно, попрактиковаться одним словом....)))
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    многомерный массив попробуй
    --- Добавлено ---
    5 лет назад уже все в мануале заштопано. Бери лишь оптимизируй на свой лад.
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.897
    Симпатии:
    718
    Атеншн, говнокод!

    PHP:
    1. <?php
    2.  
    3. $array = [];
    4. $el = 0;
    5. function createArray($array, $deep, &$el) {
    6.     if ($deep > 3) {
    7.         $el++;
    8.         return rand(0, 100);
    9.     }
    10.     for ($i = 0; $i < 5; $i++) {
    11.         if (rand(0, 1)) {
    12.             $array[$i] = rand(0, 100);
    13.         } else {
    14.             $array[$i] = createArray([], $deep++, $el);
    15.         }
    16.         $el++;
    17.     }
    18.     return $array;
    19. }
    20. $array = createArray($array, 0, $el);
    21. var_dump($el);
    22.  
    23. $f = function () {};
    24.  
    25. $fu = function () use ($array) {};
    26.  
    27. $start = microtime(true);
    28. for($i = 1; $i < 1000000; $i++) {
    29.     $fu();
    30. }
    31. echo microtime(true) - $start, PHP_EOL;
    32.  
    33. $start = microtime(true);
    34. for($i = 1; $i < 1000000; $i++) {
    35.     $f();
    36. }
    37. echo microtime(true) - $start, PHP_EOL;
    Код (Text):
    1. int(5505878)
    2. 0.096503973007202
    3. 0.073570013046265
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @MouseZver
    Уже понял по запросам в гугле, яндекс)
    Спасибо за намек...
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
  11. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Глобалки зло, лишь когда они "дикарем" в коде сидят. Как минимум потому, что имеют свойство "забываться" программистом, превращаясь в бомбу замедленного действия. Плюс, они, ну автономные чтоли.. Любая точка, где у них идет присвоение автоматом становится точкой объявления. Это хаос, безумие, бардак.

    ИМХО, каким бы процедурным не был код, и даже если автор совсем не умеет в ООП, он обязан хотя бы по сниппетам уметь собирать себе registry.

    И тогда хоть 100 глобалок плоди, ничего плохого не будет, покуда они зареганы у тебя в реестре и ты правильно с ним работаешь.
     
    romach нравится это.
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну в случае PHP да хауса прибавляется. Там, где я читал про допустимость глобальных переменных, речь шла о Pascal или C, где не так трудно отследить объявление.
    --- Добавлено ---
    Но всё равно, держать глобальную переменную $db с экземпляром mysqli или PDO для себя зазорным не считаю. Уж я не потеряю, где у меня она объявлена. Хотя давно ничего сложнее отправки почты с лендинга без фреймворка я не писал, а в них всегда есть лучшие, чем глобальная переменная решения
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.897
    Симпатии:
    718
    PHP:
    1. <?php
    2.  
    3. $array = [];
    4. $el = 0;
    5. function createArray($array, $deep, &$el) {
    6.     if ($deep > 3) {
    7.         $el++;
    8.         return rand(0, 100);
    9.     }
    10.     for ($i = 0; $i < 5; $i++) {
    11.         if (rand(0, 1)) {
    12.             $array[$i] = rand(0, 100);
    13.         } else {
    14.             $array[$i] = createArray([], $deep++, $el);
    15.         }
    16.         $el++;
    17.     }
    18.     return $array;
    19. }
    20. $array = createArray($array, 0, $el);
    21. var_dump($el);
    22.  
    23. $min = 10;
    24. $max = 20;
    25. $f = function ($value) {
    26.     global $min, $max;
    27.     return $value > $min && $value < $max;
    28. };
    29. $fu = function ($value) use ($min, $max) {
    30.     return $value > $min && $value < $max;
    31. };
    32. function array_filter_recursive( array $array, callable $callback = null ) {
    33.     $array = array_filter( $array, $callback );
    34.     foreach ( $array as &$value ) {
    35.         if ( is_array( $value ) ) {
    36.             $value = array_filter_recursive($value, $callback);
    37.         }
    38.     }
    39.     return $array;
    40. }
    41.  
    42. $start = microtime(true);
    43. array_filter_recursive($array, $fu);
    44. echo microtime(true) - $start, PHP_EOL;
    45.  
    46. $start = microtime(true);
    47. array_filter_recursive($array, $f);
    48. echo microtime(true) - $start, PHP_EOL;
    Код (Text):
    1. int(1060312)
    2. 2.3841857910156E-5
    3. 5.0067901611328E-6
    4.  
    5. int(5309563)
    6. 2.1934509277344E-5
    7. 1.7881393432617E-5
    8.  
    9. int(6418284)
    10. 1.5020370483398E-5
    11. 1.4066696166992E-5