«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2017/04/21 18:48:04  №977418 1
Чому этот код вешает мне браузер?
$newPow = function($b, $e) use (&$newPow){
if($e){

return $b * $newPow($b, $e);
} else {
return ;
}
};
echo $newPow(4, 4);
Ответы: >>977444 >>977446
Аноним 2017/04/21 20:07:14  №977444 2
>>977418

Браузер он вряд ли может подвесить, скорее сервер. Попробуй поставить там echo внутри функции и выводить, с какими аргументами она вызвана.

Возможно что у тебя тут получается бесконечная рекурсия. Тогда PHP будет выполнять скрипт, пока не закончится память. Но в современных ОС используется swap, и прежде чем PHP умрет, он загоняет остальные программы в своп, что и создает ощущение что все тормозит.

https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%B0%D1%87%D0%BA%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86

Как с этим бороться? Проверь такие настройки с помощью phpinfo():

- max_execution_time - ограничение на время выполнения
- memory_limit - ограничение на потребление памяти

Если у тебя установлен xdebug то доступна настройка xdebug.max_nesting_level ограничивающая глубину рекурсии. https://xdebug.org/docs/basic

Аноним 2017/04/21 20:15:16  №977446 3
>>977418

Также можно открыть диспетчер задач от администратора и прибить процесс php (или apache), который потребляет много памяти и ест процессор.

>>977421

Ты изучал описание как композер работает с версиями? https://getcomposer.org/doc/articles/versions.md

Ты можешь попробовать сделать одну версию основной, а другую под тегом вроде php7 и ставить ее явным указанием ветки

"mnylibrary": "dev-php7"

Но вообще я бы советовал тебе отказаться от этой идеи. Много труда потратишь. Проще подождать пока php7 наберет долю. А проверять тип аргумента можно костылем вроде

TypeHints::assertIsString($x);

Увы, кроме ссылки на документацию, подсказать наверно ничего не могу. Ну еще есть вариант сделать 2 репозитория конечно.

> при условии что я не хочу версии 1.0 & 2.0, я хочу чтобы версия была одна между двумя бранчами?
Вот это кстати хорошая идея, сделать 2 версии. Можно для второй указать требование php7, а для первой php5, и в таком случае композер сам выберет нужную версию в зависимости от версии PHP (если указать в зависимости "mylbrary": ">= 1.0").

Я бы конечно не советовал ставить зависимости на последние версии PHP, это сужает область применения твоей библиотеки.