⚡️Пожалуйста не флудите в комментариях и не оскорбляйте других участников! Виновные будут всю жизнь программировать на джумле! 🤡🤡
PHP newbie | bukachuk pinned «⚡️Пожалуйста не флудите в комментариях и не оскорбляйте других участников! Виновные будут всю жизнь программировать на джумле! 🤡🤡»
https://www.youtube.com/watch?v=cNFKo0rQ5Vk
Видео скорее для программистов уровня middle и выше, но новички тоже могут посмотреть, возможно в будущем с этим придется столкнуться, про то как добавить колонку или изменить в большой таблице mysql на рабочем проекте, особенно когда требование - не положить прод базу и не останавливать текущие процессы. Смоделировал возможные ситуации и варианты выхода из них.
Видео скорее для программистов уровня middle и выше, но новички тоже могут посмотреть, возможно в будущем с этим придется столкнуться, про то как добавить колонку или изменить в большой таблице mysql на рабочем проекте, особенно когда требование - не положить прод базу и не останавливать текущие процессы. Смоделировал возможные ситуации и варианты выхода из них.
YouTube
Как правильно добавить или изменить колонку в большой таблице Mysql
Открытый канал в телеге - https://t.me/PHPnoob
Чат взаимопомощи PHP - https://t.me/php_noob
Добавление или изменение колонок в большой таблице MySQL может быть деликатным процессом, особенно когда таблица содержит большое количество данных. Это руководство…
Чат взаимопомощи PHP - https://t.me/php_noob
Добавление или изменение колонок в большой таблице MySQL может быть деликатным процессом, особенно когда таблица содержит большое количество данных. Это руководство…
Вопрос с собеседования на PHP разработчика.
Что будет выводом программы?
Здесь вопрос на умение читать код. Middle/Senior должен дать ответ в несколько секунд.
$a = 5;
$a = $a ?: 3;
echo $a;
Очень часто говорят о том, что не видели такой записи никогда, что конечно же является не очень хорошим сигналом.
По сути это краткая запись тернарного оператора, просто после ? знака нужно продублировать $a,
то есть будет $a = $a ? $a : 3; - то есть когда у вас есть дублирование условия и первого результата, результат можно опустить.
Читается такой оператор просто, если $a -> true то $a иначе 3, в итоге ответ здесь - 5.
Что будет выводом программы?
Здесь вопрос на умение читать код. Middle/Senior должен дать ответ в несколько секунд.
$a = 5;
$a = $a ?: 3;
echo $a;
Очень часто говорят о том, что не видели такой записи никогда, что конечно же является не очень хорошим сигналом.
По сути это краткая запись тернарного оператора, просто после ? знака нужно продублировать $a,
то есть будет $a = $a ? $a : 3; - то есть когда у вас есть дублирование условия и первого результата, результат можно опустить.
Читается такой оператор просто, если $a -> true то $a иначе 3, в итоге ответ здесь - 5.
Что значит ошибка 504 Gateway Timeout
Ошибка 504 Gateway Timeout означает, что сервер, выполняющий роль шлюза или прокси (в нашем случае это обычно NGINX), не получил своевременный ответ от вышестоящего сервера, к которому он обращался для выполнения запроса.
Если простыми словами, запрос сначала приходит на NGINX, далее передается в PHP-FPM, который запускает PHP код и выполняет его, так вот если данный код работает дольше, чем timeout ожидания ответа, выставленный в nginx, мы получаем данную ошибку. Обычно по умолчанию таймаут выставлен в 30 сек. В NGINX это выставляется в секции location - fastcgi_read_timeout 30;
Какие могут быть причины данного явления:
1. Перегрузка сервера, который может быть перегружен запросами и не успевает обработать все входящие запросы своевременно (нужно как минимум глянуть htop на сервере).
2. Проблемы с кодом PHP, например обращение на внешний сервис по HTTP протоколу, который в данный момент лежит, как пример - стягивание курсов валют с сайта ЦБ. Клиент обратился к нашему сайту, PHP пошел за курсами ЦБ c помощью CURL с высталенным таймаутом 30 сек. как обычно, не дождался ответа за 30 сек. тк удаленный сервер лежит, в этом время ожидания у nginx истекло, он выдал 504.
3. Слишком низкое значение таймаута выставленное в nginx по ошибке (поставили 5 сек. но в нагрузочное время этого оказалось мало)
4. PHP-FPM просто не работает на сервере тк упал по какой-то причине (нужно пойти на сервер проверить - sudo systemctl status nginx.service
Какие варианты решения:
1. Настроить таймауты (в nginx и PHP-FPM): Проверить и при необходимости увеличить значения таймаутов в nginx. Можно ли увеличивать его в потолок? И да и нет. Если причина в высокой нагрузке, это только усугубит ситуацию. Тк работает это так, допустим у PHP-FPM выставленно максимальное значение процессов (max_children)- 200, подключились 200 клиентов, 200 запросов, часть их них успела отработать, часть продолжает выполняться, тк сервер пригружен. В случае с правильным таймаутом их просто в итоге сбросит с линии и подключаться другие клиенты, то есть сервис будет доступен, но частично. В случае же увеличении таймаута, они все будут оставаться на линии еще большее время, нагрузка будет расти, остальные клиенты будут ожидать в очереди, в итоге серверу станет еще хуже, пострадавших клиентов станет больше, очень часто в такой ситуации сервер просто ложится намертво.
2. Разобраться с PHP кодом, если в нем какая-то сложная логика, которую нельзя легко ускорить, как вариант, вынести данные операции в очередь (RabbitMQ, Redis, etc.). Если нагрузка в целом небольшая, можно временно увеличить таймаут например на 60 сек. а далее заняться решением основной проблемы (мы просто выиграем время)
3. Посмотреть в целом настройки PHP-FPM, тк там есть, что подкрутить. Подключить OPCACHE если он не подключен, он даст прирост скорости PHP
Ошибка 504 Gateway Timeout означает, что сервер, выполняющий роль шлюза или прокси (в нашем случае это обычно NGINX), не получил своевременный ответ от вышестоящего сервера, к которому он обращался для выполнения запроса.
Если простыми словами, запрос сначала приходит на NGINX, далее передается в PHP-FPM, который запускает PHP код и выполняет его, так вот если данный код работает дольше, чем timeout ожидания ответа, выставленный в nginx, мы получаем данную ошибку. Обычно по умолчанию таймаут выставлен в 30 сек. В NGINX это выставляется в секции location - fastcgi_read_timeout 30;
Какие могут быть причины данного явления:
1. Перегрузка сервера, который может быть перегружен запросами и не успевает обработать все входящие запросы своевременно (нужно как минимум глянуть htop на сервере).
2. Проблемы с кодом PHP, например обращение на внешний сервис по HTTP протоколу, который в данный момент лежит, как пример - стягивание курсов валют с сайта ЦБ. Клиент обратился к нашему сайту, PHP пошел за курсами ЦБ c помощью CURL с высталенным таймаутом 30 сек. как обычно, не дождался ответа за 30 сек. тк удаленный сервер лежит, в этом время ожидания у nginx истекло, он выдал 504.
3. Слишком низкое значение таймаута выставленное в nginx по ошибке (поставили 5 сек. но в нагрузочное время этого оказалось мало)
4. PHP-FPM просто не работает на сервере тк упал по какой-то причине (нужно пойти на сервер проверить - sudo systemctl status nginx.service
Какие варианты решения:
1. Настроить таймауты (в nginx и PHP-FPM): Проверить и при необходимости увеличить значения таймаутов в nginx. Можно ли увеличивать его в потолок? И да и нет. Если причина в высокой нагрузке, это только усугубит ситуацию. Тк работает это так, допустим у PHP-FPM выставленно максимальное значение процессов (max_children)- 200, подключились 200 клиентов, 200 запросов, часть их них успела отработать, часть продолжает выполняться, тк сервер пригружен. В случае с правильным таймаутом их просто в итоге сбросит с линии и подключаться другие клиенты, то есть сервис будет доступен, но частично. В случае же увеличении таймаута, они все будут оставаться на линии еще большее время, нагрузка будет расти, остальные клиенты будут ожидать в очереди, в итоге серверу станет еще хуже, пострадавших клиентов станет больше, очень часто в такой ситуации сервер просто ложится намертво.
2. Разобраться с PHP кодом, если в нем какая-то сложная логика, которую нельзя легко ускорить, как вариант, вынести данные операции в очередь (RabbitMQ, Redis, etc.). Если нагрузка в целом небольшая, можно временно увеличить таймаут например на 60 сек. а далее заняться решением основной проблемы (мы просто выиграем время)
3. Посмотреть в целом настройки PHP-FPM, тк там есть, что подкрутить. Подключить OPCACHE если он не подключен, он даст прирост скорости PHP
⚡️ Самая главная ошибка начинающих разработчиков
Вы можете найти много историй, про ошибки начинающих, с кучей пунктов, но главный на деле в этом списке один.
И так, вы решили научиться программированию, открыли интернет, купили курс, смотрите Youtube, это неважно. Ответьте себе на один простой вопрос - сколько вы сделали проектов от начала до конца, пускай даже небольших?
Очень часто ответ здесь - ноль. В этом и есть главная проблема и ошибка, тк. чтобы научиться любому делу, пусть это лечить людей, водить машину, нужна практика и только практика. Причем много практики, как можно больше.
В ИТ как правило работает простое правило - гладко было на бумаге, да забыли про овраги. Вы смотрите видеоурок или читаете статью, вам вроде все ясно и понятно, но как только вы начинаете даже повторять тоже самое, а более того, пытаетесь сделать немного иначе, у вас возникают разные сложности. Причем это правило работает и для программистов со стажем, я вчера сидел в Jenkins настраивал деплой, и пол часа втыкал в экран, а на деле просто описался в названии переменной. Поэтому вам нужна практика и еще раз практика. Плюс ко всему программирование - это не только знание языка, это и быстрая печать на клавиатуре, умение читать ошибки на английском языке, умение правильно искать ответ на свой вопрос в Google и еще много все, и все эти навыки вместе вы получите только практикой. Плюс само гугление проблемы и чтение форумов наполняет вас теории само по себе.
Что же в итоге делать?
Берете любую понравившуюся идею, тут не стоит утопать в думках на несколько дней, тк это не сильно важно. Самые простые варианты: блог статей, доска объявлений, доска объявлений автомобилей, доска объявлений недвижимости.
Последние примеры по мне так вообще идеальные, тк там прорабатываются основные моменты веб программирования, плюс много разных полей характеристик объекта итд. Далее берете любой первый попавшийся дизайн шаблон и начинаете делать. Долго упорно и нудно, не отвлекаясь на разные медиа итд.
Не гнаться за перфекционизмом
Не надо переживать на начальном этапе, что вы сделаете что-то не так, тк всем на это будет пофиг. Вам нужно просто любыми силами и способами сделать рабочий сайт, который будет предоставлять какой-то функционал.
Его желательно максимально упростить, то есть не пытаться на коленках сделать убийцу VK тк это будет утопия и вы быстро выгорите. Далее делаете проект, в идеале находите на раз наставника, он посмотрит код, даст рекомендации.
Далее берете сдедующий проект и делаете его уже лучше и сложнее, пусть с вкраплениями ООП и composer. Следующий шаг тоже самое на фреймворке.
Вы можете найти много историй, про ошибки начинающих, с кучей пунктов, но главный на деле в этом списке один.
И так, вы решили научиться программированию, открыли интернет, купили курс, смотрите Youtube, это неважно. Ответьте себе на один простой вопрос - сколько вы сделали проектов от начала до конца, пускай даже небольших?
Очень часто ответ здесь - ноль. В этом и есть главная проблема и ошибка, тк. чтобы научиться любому делу, пусть это лечить людей, водить машину, нужна практика и только практика. Причем много практики, как можно больше.
В ИТ как правило работает простое правило - гладко было на бумаге, да забыли про овраги. Вы смотрите видеоурок или читаете статью, вам вроде все ясно и понятно, но как только вы начинаете даже повторять тоже самое, а более того, пытаетесь сделать немного иначе, у вас возникают разные сложности. Причем это правило работает и для программистов со стажем, я вчера сидел в Jenkins настраивал деплой, и пол часа втыкал в экран, а на деле просто описался в названии переменной. Поэтому вам нужна практика и еще раз практика. Плюс ко всему программирование - это не только знание языка, это и быстрая печать на клавиатуре, умение читать ошибки на английском языке, умение правильно искать ответ на свой вопрос в Google и еще много все, и все эти навыки вместе вы получите только практикой. Плюс само гугление проблемы и чтение форумов наполняет вас теории само по себе.
Что же в итоге делать?
Берете любую понравившуюся идею, тут не стоит утопать в думках на несколько дней, тк это не сильно важно. Самые простые варианты: блог статей, доска объявлений, доска объявлений автомобилей, доска объявлений недвижимости.
Последние примеры по мне так вообще идеальные, тк там прорабатываются основные моменты веб программирования, плюс много разных полей характеристик объекта итд. Далее берете любой первый попавшийся дизайн шаблон и начинаете делать. Долго упорно и нудно, не отвлекаясь на разные медиа итд.
Не гнаться за перфекционизмом
Не надо переживать на начальном этапе, что вы сделаете что-то не так, тк всем на это будет пофиг. Вам нужно просто любыми силами и способами сделать рабочий сайт, который будет предоставлять какой-то функционал.
Его желательно максимально упростить, то есть не пытаться на коленках сделать убийцу VK тк это будет утопия и вы быстро выгорите. Далее делаете проект, в идеале находите на раз наставника, он посмотрит код, даст рекомендации.
Далее берете сдедующий проект и делаете его уже лучше и сложнее, пусть с вкраплениями ООП и composer. Следующий шаг тоже самое на фреймворке.
⚡️ Вопрос с собеседования на PHP разработчика.
Что будет выводом программы?
$id = 4;
if ($id = 2) $id = 3;
echo $id;
Ответ будет позже в комментариях, можете ответить сами, только не запускать код)
Что будет выводом программы?
$id = 4;
if ($id = 2) $id = 3;
echo $id;
Ответ будет позже в комментариях, можете ответить сами, только не запускать код)
Декомпозиция задач
Декомпозиция задач — это процесс их разделения на отдельные небольшие шаги (подзадачи). Делается это прежде всего для упрощения процесса разработки и контроля выполненных задач.
Например вам нужно сделать регистрацию пользователя, авторизацию и выход из системы и страницу редактирования его профиля. Вы можете это сделать в один приход, но проблема здесь во первых возникает в процессе оценки сроков задачи плюс как правило такой pull реквест (запрос на внесение изменений в ветку master/main) будет содержать в себе много изменений, что усложнит процесс review кода (когда ваш код смотрит и проверяет другой программист) как для ревьюера (вашего тим лида например), так и для исполнителя, тк правок может быть после ревью много и не одна итерация.
Поэтому эту задачу можно разбить на подзадачи.
1. Делаем регистрацию
2. Делаем авторизацию пользователя и выход
3. Делаем страницу редактирования профиля пользователя
Плюс данный подходят позволяет минимализировать шансы "все сломать", тк небольшие куски кода легче контролировать. Вы можете даже пушить в репозиторий код, который не будет вообще запускаться на проде и это вполне себе нормально,
главное, чтобы текущая функциональность не была нарушена. В конечном счете вы можете разработать все компоненты модуля и только потом уже подключить его к текущей системе и провести полноценное тестирование всех компонетов вместе.
Кто должен делать декомпозицию?
Декомпозицией задачи занимаются специалисты по проектному управлению, аналитики, а также менеджеры проектов. Этот процесс также могут выполнять разработчики программного обеспечения и инженеры (то есть вы) или ваш тимлид, когда речь идет о технических проектах
Декомпозиция задач — это процесс их разделения на отдельные небольшие шаги (подзадачи). Делается это прежде всего для упрощения процесса разработки и контроля выполненных задач.
Например вам нужно сделать регистрацию пользователя, авторизацию и выход из системы и страницу редактирования его профиля. Вы можете это сделать в один приход, но проблема здесь во первых возникает в процессе оценки сроков задачи плюс как правило такой pull реквест (запрос на внесение изменений в ветку master/main) будет содержать в себе много изменений, что усложнит процесс review кода (когда ваш код смотрит и проверяет другой программист) как для ревьюера (вашего тим лида например), так и для исполнителя, тк правок может быть после ревью много и не одна итерация.
Поэтому эту задачу можно разбить на подзадачи.
1. Делаем регистрацию
2. Делаем авторизацию пользователя и выход
3. Делаем страницу редактирования профиля пользователя
Плюс данный подходят позволяет минимализировать шансы "все сломать", тк небольшие куски кода легче контролировать. Вы можете даже пушить в репозиторий код, который не будет вообще запускаться на проде и это вполне себе нормально,
главное, чтобы текущая функциональность не была нарушена. В конечном счете вы можете разработать все компоненты модуля и только потом уже подключить его к текущей системе и провести полноценное тестирование всех компонетов вместе.
Кто должен делать декомпозицию?
Декомпозицией задачи занимаются специалисты по проектному управлению, аналитики, а также менеджеры проектов. Этот процесс также могут выполнять разработчики программного обеспечения и инженеры (то есть вы) или ваш тимлид, когда речь идет о технических проектах
Присваивание в if условии
Допустим есть такой код:
if ($request = $this->getRequest()) {
// здесь какая-то логика
}
Это называется присваивание под условием, альтернатива такому коду
$request = $this->getRequest();
if ($request) {
// здесь какая-то логика
}
Такая практика считается не самой лучшей, хотя это вопрос спорный. Тк первый вариант позволяет немного сократить код на одну строку и когда таких условий много, это становится весомым.
Какие минусы данного подхода:
1. Присваивание в условии может сделать код трудным для чтения и понимания. Читателю кода будет сложнее сразу понять, что происходит, поскольку переменные неявно изменяются в самом условии.
2. Легко случайно написать оператор присваивания = вместо оператора сравнения ==. Это приведет к логическим ошибкам, которые могут быть трудноуловимыми.
3. Присваивание внутри условия может привести к неожиданным побочным эффектам, так как переменная изменяет свое значение в месте, где это не ожидается. Это может затруднить отладку и понимание поведения программы.
Какой вариант выбирать - решать вам. Мне например эти аргументы против кажутся совсем притянутые, кроме наверное первого, тк ответ на них простой - читай код внимательно)
Допустим есть такой код:
if ($request = $this->getRequest()) {
// здесь какая-то логика
}
Это называется присваивание под условием, альтернатива такому коду
$request = $this->getRequest();
if ($request) {
// здесь какая-то логика
}
Такая практика считается не самой лучшей, хотя это вопрос спорный. Тк первый вариант позволяет немного сократить код на одну строку и когда таких условий много, это становится весомым.
Какие минусы данного подхода:
1. Присваивание в условии может сделать код трудным для чтения и понимания. Читателю кода будет сложнее сразу понять, что происходит, поскольку переменные неявно изменяются в самом условии.
2. Легко случайно написать оператор присваивания = вместо оператора сравнения ==. Это приведет к логическим ошибкам, которые могут быть трудноуловимыми.
3. Присваивание внутри условия может привести к неожиданным побочным эффектам, так как переменная изменяет свое значение в месте, где это не ожидается. Это может затруднить отладку и понимание поведения программы.
Какой вариант выбирать - решать вам. Мне например эти аргументы против кажутся совсем притянутые, кроме наверное первого, тк ответ на них простой - читай код внимательно)
⚡️Когда планируется выпуск PHP 8.4? ⚡️
Выпуск PHP 8.4 запланирован на 21 ноября 2024 года.
Что будет интересного (здесь конечно не полный список всех изменений):
1. Новый MyClass()->method() без скобок
Будет так (вокруг созданного объекта не нужны будут скобки)
$request = new Request()->withMethod('GET'));
Сейчас это так (скобки вокруг создания объекта и это действительно напрягает, кстати чтобы так можно было вызывать методы цепочкой, нужно в методе возвращать return $this):
$request = (new Request())->withMethod('GET');
2. Создать DateTime из временной метки Unix
$dateTime = DateTimeImmutable::createFromTimestamp(1718337072);
$dateTime->format('Y-m-d'); // 2024-06-14
3. Новые функции для работы с массивом
array_find($array, function (string $value)) - вторым аргументом будем передавать замыкание, которое ищет нужное и возвращает true если нашли
array_find_key($array, function (string $key)) - здесь аналогично, только искать будет ключ массива
array_any($array, function (string $value)) - будет проверять, что хотя бы один элемент соответствует условию проверки в замыкании, сама функция возвращает bool
array_all($array, function (string $value)) - здесь будет проверять, что все элементы соответствуют условию в замыкании (замыкание возращает bool), сама функция возвращает bool
4. Новые mb_ функции для работы с мультибайтовыми кодировками (то есть русские буквы например в UTF-8)
Проблема здесь возникает, что обычные trim и другие функции неправильно работают с UTF-8 и выдают ложные результаты, поэтому в PHP нужно использовать mb_ функции, но их список был не полный. Новые функции (их текущие аналоги без приставки mb_):
mb_trim
mb_ltrim
mb_rtrim
mb_ucfirst
mb_lcfirst
5. Хуки для свойств класса
Если упрощенно, то можно будет в классе определить хук на какое-либо свойство и присваивании этому значению, будет выполнена логика хука.
Сейчас без этого вам нужно пискать логику в сеттерах например:
public function setFullname(string $name, string $surname): void
{
$this->fullname = $name . ' ' . $surname;
$this->name = $name;
$this->surname = $surname;
}
Более подробно с примерами здесь:
https://wiki.php.net/rfc/property-hooks
Выпуск PHP 8.4 запланирован на 21 ноября 2024 года.
Что будет интересного (здесь конечно не полный список всех изменений):
1. Новый MyClass()->method() без скобок
Будет так (вокруг созданного объекта не нужны будут скобки)
$request = new Request()->withMethod('GET'));
Сейчас это так (скобки вокруг создания объекта и это действительно напрягает, кстати чтобы так можно было вызывать методы цепочкой, нужно в методе возвращать return $this):
$request = (new Request())->withMethod('GET');
2. Создать DateTime из временной метки Unix
$dateTime = DateTimeImmutable::createFromTimestamp(1718337072);
$dateTime->format('Y-m-d'); // 2024-06-14
3. Новые функции для работы с массивом
array_find($array, function (string $value)) - вторым аргументом будем передавать замыкание, которое ищет нужное и возвращает true если нашли
array_find_key($array, function (string $key)) - здесь аналогично, только искать будет ключ массива
array_any($array, function (string $value)) - будет проверять, что хотя бы один элемент соответствует условию проверки в замыкании, сама функция возвращает bool
array_all($array, function (string $value)) - здесь будет проверять, что все элементы соответствуют условию в замыкании (замыкание возращает bool), сама функция возвращает bool
4. Новые mb_ функции для работы с мультибайтовыми кодировками (то есть русские буквы например в UTF-8)
Проблема здесь возникает, что обычные trim и другие функции неправильно работают с UTF-8 и выдают ложные результаты, поэтому в PHP нужно использовать mb_ функции, но их список был не полный. Новые функции (их текущие аналоги без приставки mb_):
mb_trim
mb_ltrim
mb_rtrim
mb_ucfirst
mb_lcfirst
5. Хуки для свойств класса
Если упрощенно, то можно будет в классе определить хук на какое-либо свойство и присваивании этому значению, будет выполнена логика хука.
Сейчас без этого вам нужно пискать логику в сеттерах например:
public function setFullname(string $name, string $surname): void
{
$this->fullname = $name . ' ' . $surname;
$this->name = $name;
$this->surname = $surname;
}
Более подробно с примерами здесь:
https://wiki.php.net/rfc/property-hooks
Использование разных версий PHP по миру. Почему так много старых версий? Все просто, многим компаниям, особенно с историей, достаточно дорого и сложно сменить версию на следующую и чем выше разрыв между версиями, тем труднее. В продуктовой разработке это может занять вплоть до года, а то и больше, если такая цель поставлена. Если версия PHP в компании старая - это вовсе не значит, что в ней плохо с разработкой, это скорее значит, что компания давно на рынке и в кодовой базе достаточно легаси.
PHP умирает, зачем его изучать?
Это любимая байка в интернете, которой уже, наверное, более 15 лет. Я использую PHP более 20 лет, и все это время фоном была данная история, что вот-вот он умрет. На деле язык хорошо продвинулся в развитии, улучшилась производительность, поддержка ООП и т.д. Хороший толчок этой истории дал выход Ruby on Rails и Django на Питоне на рынок. Лет 10 назад каждая вторая статья в сети была о том, какой же PHP плохой, и что все должны переходить на рельсы.
В итоге где сейчас Ruby on Rails? Поэтому не нужно переживать, что вы выучите какую-то умирающую технологию, как PHP, так как он не умирает.
Даже если мы гипотетически представим, что завтра PHP начнет умирать, это тоже не проблема. Так как сама по себе backend-разработка состоит не только из языка программирования сегодня, это и очереди, базы данных, in-memory базы данных и многое другое. Поэтому перейти на другой backend-язык, если вы программируете уже пару лет на одном языке, будет несложно.
Исследование w3Techs на 2024 год показывает 76% использование PHP https://w3techs.com/technologies/overview/programming_language
Это любимая байка в интернете, которой уже, наверное, более 15 лет. Я использую PHP более 20 лет, и все это время фоном была данная история, что вот-вот он умрет. На деле язык хорошо продвинулся в развитии, улучшилась производительность, поддержка ООП и т.д. Хороший толчок этой истории дал выход Ruby on Rails и Django на Питоне на рынок. Лет 10 назад каждая вторая статья в сети была о том, какой же PHP плохой, и что все должны переходить на рельсы.
В итоге где сейчас Ruby on Rails? Поэтому не нужно переживать, что вы выучите какую-то умирающую технологию, как PHP, так как он не умирает.
Даже если мы гипотетически представим, что завтра PHP начнет умирать, это тоже не проблема. Так как сама по себе backend-разработка состоит не только из языка программирования сегодня, это и очереди, базы данных, in-memory базы данных и многое другое. Поэтому перейти на другой backend-язык, если вы программируете уже пару лет на одном языке, будет несложно.
Исследование w3Techs на 2024 год показывает 76% использование PHP https://w3techs.com/technologies/overview/programming_language
W3Techs
Usage Statistics and Market Share of Server-side Programming Languages for Websites, June 2025
What are the most popular server-side programming languages on the web
Нюансы использование ссылок в циклах
Допустим есть такой код (к каждому элементы массива прибавляем 1)
На выходе будет массив:
[2, 3, 4, 5, 6];
То есть при передаче по ссылке внутри foreach (знак амперсанта & перед $number) вы будете менять значение именно в массиве, а не новой переменной $number
После цикла стоит сделать unset($number); тк если вы это не сделаете, то при использовании $number снова, вы измените последний элемент массива
<?php
$numbers = [1, 2, 3, 4, 5];
foreach ($numbers as &$number) {
$number++;
}
unset($number); // Здесь стоит так делать, чтобы избежать повторное использование ссылки на последний элемент массива
$number = 10; // Здесь, если не будет unset, который выше, вы измените последний элемент массива numbers, и вместо 6 будет 10, тк здесь идет ссылка на последний элемент массива, а не его значение
Допустим есть такой код (к каждому элементы массива прибавляем 1)
На выходе будет массив:
[2, 3, 4, 5, 6];
То есть при передаче по ссылке внутри foreach (знак амперсанта & перед $number) вы будете менять значение именно в массиве, а не новой переменной $number
После цикла стоит сделать unset($number); тк если вы это не сделаете, то при использовании $number снова, вы измените последний элемент массива
<?php
$numbers = [1, 2, 3, 4, 5];
foreach ($numbers as &$number) {
$number++;
}
unset($number); // Здесь стоит так делать, чтобы избежать повторное использование ссылки на последний элемент массива
$number = 10; // Здесь, если не будет unset, который выше, вы измените последний элемент массива numbers, и вместо 6 будет 10, тк здесь идет ссылка на последний элемент массива, а не его значение
https://habr.com/ru/articles/832678/ у кого ютуб перестал с компьютера работать
Хабр
Замедление YouTube с технической стороны: ограничение и обход
Привет, Хабр! В последнее время замечаю огромное количество информации по поводу замедления Великого, но очень мало где видел конкретику о том, как именно это работает. Одно лишь отчаяние "мы все...