Ну, во-первых не в два, а процентов на 10-15, во-вторых, если количество итераций не исчисляется миллионами, ты даже миллисекунду на этом не выиграешь, а в третьих dependency injection.
Вот сейчас я ничего не понял. PHP: <?php $array = range(0, 10000); $f = function () {}; $fu = function () use ($array) {}; $start = microtime(true); for($i = 1; $i < 1000000; $i++) { $fu(); } echo microtime(true) - $start, PHP_EOL; $start = microtime(true); for($i = 1; $i < 1000000; $i++) { $f(); } echo microtime(true) - $start, PHP_EOL; Код (Text): 0.071380853652954 0.059195995330811
Нет, можно организовать логику подключения так, чтоб подключалось только то, что нужно при конкретном запросе. У нас интерпретируемый язык, все подключения файлов происходят тоже в рантайме, а не на этапе компиляции.
@MouseZver @mkramer Когда разберусь с этими классами и функциями к бд, отпишусь... Завал на парах Все же посмотрел, на классы и мне показалось так даже будет проще если их описать. А потом использовать, вообще круто. Будем пробовать написать класс БД, хотя я в функциях 0 с хвостиком за который можно зацепится потренироваться нужно, попрактиковаться одним словом....)))
многомерный массив попробуй --- Добавлено --- 5 лет назад уже все в мануале заштопано. Бери лишь оптимизируй на свой лад.
Атеншн, говнокод! PHP: <?php $array = []; $el = 0; function createArray($array, $deep, &$el) { if ($deep > 3) { $el++; return rand(0, 100); } for ($i = 0; $i < 5; $i++) { if (rand(0, 1)) { $array[$i] = rand(0, 100); } else { $array[$i] = createArray([], $deep++, $el); } $el++; } return $array; } $array = createArray($array, 0, $el); var_dump($el); $f = function () {}; $fu = function () use ($array) {}; $start = microtime(true); for($i = 1; $i < 1000000; $i++) { $fu(); } echo microtime(true) - $start, PHP_EOL; $start = microtime(true); for($i = 1; $i < 1000000; $i++) { $f(); } echo microtime(true) - $start, PHP_EOL; Код (Text): int(5505878) 0.096503973007202 0.073570013046265
https://github.com/MouseZver/test-fun-use-vs-global 169 строка PHP: array_filter ( $ITEMS, function ( $A ) use ( $XX, $YY ) { return а потом PHP: array_filter ( $ITEMS, function ( $A ) { global $XX, $YY; return жду. --- Добавлено --- блоо а я то маялся с ключами ептись PDO::FETCH_FUNC, function ( ...
Глобалки зло, лишь когда они "дикарем" в коде сидят. Как минимум потому, что имеют свойство "забываться" программистом, превращаясь в бомбу замедленного действия. Плюс, они, ну автономные чтоли.. Любая точка, где у них идет присвоение автоматом становится точкой объявления. Это хаос, безумие, бардак. ИМХО, каким бы процедурным не был код, и даже если автор совсем не умеет в ООП, он обязан хотя бы по сниппетам уметь собирать себе registry. И тогда хоть 100 глобалок плоди, ничего плохого не будет, покуда они зареганы у тебя в реестре и ты правильно с ним работаешь.
Ну в случае PHP да хауса прибавляется. Там, где я читал про допустимость глобальных переменных, речь шла о Pascal или C, где не так трудно отследить объявление. --- Добавлено --- Но всё равно, держать глобальную переменную $db с экземпляром mysqli или PDO для себя зазорным не считаю. Уж я не потеряю, где у меня она объявлена. Хотя давно ничего сложнее отправки почты с лендинга без фреймворка я не писал, а в них всегда есть лучшие, чем глобальная переменная решения
PHP: <?php $array = []; $el = 0; function createArray($array, $deep, &$el) { if ($deep > 3) { $el++; return rand(0, 100); } for ($i = 0; $i < 5; $i++) { if (rand(0, 1)) { $array[$i] = rand(0, 100); } else { $array[$i] = createArray([], $deep++, $el); } $el++; } return $array; } $array = createArray($array, 0, $el); var_dump($el); $min = 10; $max = 20; $f = function ($value) { global $min, $max; return $value > $min && $value < $max; }; $fu = function ($value) use ($min, $max) { return $value > $min && $value < $max; }; function array_filter_recursive( array $array, callable $callback = null ) { $array = array_filter( $array, $callback ); foreach ( $array as &$value ) { if ( is_array( $value ) ) { $value = array_filter_recursive($value, $callback); } } return $array; } $start = microtime(true); array_filter_recursive($array, $fu); echo microtime(true) - $start, PHP_EOL; $start = microtime(true); array_filter_recursive($array, $f); echo microtime(true) - $start, PHP_EOL; Код (Text): int(1060312) 2.3841857910156E-5 5.0067901611328E-6 int(5309563) 2.1934509277344E-5 1.7881393432617E-5 int(6418284) 1.5020370483398E-5 1.4066696166992E-5