вторник, 17 декабря 2019 г.

Сборка мусора в php

Недавно встретился хороший пост для начинающих о сборке мусора (он же garbage collection) в php. Далее я попытаюсь перевести этот пост на русский и добавить немного собственных данных. Ссылка на оригинальный пост - в конце.

Начнем с того, что так как php - язык интерпретируемый, то вам не нужно заморачиваться управлением памятью - выделением памяти, и что более важно - очисткой памяти. Этим в php занимается специальный механизм, называемый сборкой мусора (или garbage collection, или же gc).

Сборка мусора работает тремя способами:
  1. При уходе переменной из области видимости
  2. При подсчете ссылок
  3. При сборе циклических ссылок

четверг, 12 декабря 2019 г.

Or-pattern в glob

Короткий пост о том, как в аргументе функции glob использовать шаблон или.

Предположим, каталог содержит следующие файлы:

- file.txt
- picture
- picture.gif
- picture.jpg
- picture.png
- picture1.jpg


И требуется получить файлы имеющие в названии только "picture" ("picture1" не подходит) и с расширениями jpg, png или вообще без расширения.

Естественно, простейшим решением можно считать объединение результатов трех вызовов glob:

print_r(array_merge(
    glob('./picture\.jpg'),
    glob('./picture\.png'),
    glob('./picture')
));


Но давайте попробуем ограничиться одним вызовом. В этом нам поможет изучение странички мануала функции glob, а точнее - списка параметров. В нем нас интересует второй аргумент flags и его значение GLOB_BRACE:

print_r(
    glob('./picture{,\.jpg,\.png}', GLOB_BRACE)
);


Получаем тот же самый набор файлов, что и в первом примере (сортировка не в счет). На этом всё, читайте почаще мануалы и находите решения попроще. Кстати, в комментах можете поделиться еще более хитрыми шаблонами для glob, если у вас таковые есть.