День | — | — |
d | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
D | Текстовое представление дня недели, 3 символа | от Mon до Sun |
j | День месяца без ведущего нуля | от 1 до 31 |
l (строчная ‘L’) | Полное наименование дня недели | от Sunday до Saturday |
N | Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0) | от 1 (понедельник) до 7 (воскресенье) |
S | Английский суффикс порядкового числительного дня месяца, 2 символа | st, nd, rd или th. Применяется совместно с j |
w | Порядковый номер дня недели | от 0 (воскресенье) до 6 (суббота) |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Неделя | — | — |
W | Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) | Например: 42 (42-я неделя года) |
Месяц | — | — |
F | Полное наименование месяца, например January или March | от January до December |
m | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
M | Сокращенное наименование месяца, 3 символа | от Jan до Dec |
n | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
t | Количество дней в указанном месяце | от 28 до 31 |
Год | — | — |
L | Признак високосного года | 1, если год високосный, иначе 0. |
o | Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) | Примеры: |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2003 |
y | Номер года, 2 цифры | Примеры: 99, 03 |
Время | — | — |
a | Ante meridiem (англ. «до полудня») или Post meridiem (англ. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
B | Время в формате Интернет-времени (альтернативной системы отсчета времени суток) | от 000 до 999 |
g | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
G | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
h | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
H | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
i | Минуты с ведущим нулём | от 00 до 59 |
s | Секунды с ведущим нулём | от 00 до 59 |
u | Например: 654321 | |
Временная зона | — | — |
e | Код шкалы временной зоны(добавлен в версии PHP 5.1.0) | Примеры: UTC, GMT, Atlantic/Azores |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, 0 в противном случае. |
O | Разница с временем по Гринвичу, в часах | Например: +0200 |
P | Разница с временем по Гринвичу с двоеточием между часами и минутами (добавлено в версии PHP 5.1.3) | Например: +02:00 |
T | Примеры: EST, MDT … | |
Z | Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные. | от -43200 до 50400 |
Полная дата/время | — | — |
c | Дата в формате стандарта ISO 8601 (добавлено в PHP 5) | 2004-02-12T15:19:21+00:00 |
r | Дата в формате » RFC 2822 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) | Смотрите также time() |
PHP: История PHP — Manual
История PHP
PHP Tools, FI, Construction Kit и PHP/FI
PHP, как всем известно, на самом деле преемник продукта под названием PHP/FI. Созданное в 1994 году Расмусом Лердорфом, самое первое воплощение PHP было простым набором CGI-скриптов, написанных на языке программирования Си. Изначально используя их для отслеживания посещений своего веб-резюме, он назвал этот набор скриптов «Personal Homepages Tools» («Инструменты для персональных домашних страниц»), но более часто упоминалось название «PHP Tools». Со временем требовалось все больше улучшений функциональности, и Расмус переписал PHP Tools, создав более крупную и богатую реализацию. Эта новая реализация была способна взаимодействовать с базами данных и многое другое, что создавало фреймворк, с помощью которого пользователи могли создавать простые динамические веб-приложения, такие как гостевые книги. В июне 1995 года Расмус » открыл исходный код PHP Tools общественности, что позволило разработчикам использовать его по своему усмотрению. Это также дало возможность пользователям исправлять ошибки в коде и улучшать его.
В сентябре того же года, Расмус расширил PHP и на короткое время убрал из названия PHP. Теперь в виде инструмента FI (сокращение от «Интерпретатор Форм»), новая реализация включала в себя некоторые основные функциональные возможности того PHP, который мы знаем сегодня. Она имела Perl-подобные переменные, автоматическую интерпретацию форм и встраиваемый в HTML синтаксис. Синтаксис языка был похож на Perl, хотя и был гораздо более ограниченным, простым, и в некоторой степени противоречивым. Для того, чтобы вставлять код в HTML-файл, разработчикам пришлось использовать HTML комментарии. Хотя этот метод был не совсем хорошо принят, FI по-прежнему набирал популярность в качестве CGI-инструмента, но все-таки не в качестве языка. Однако, перемены начались в следующем месяце, когда в октябре 1995 года Расмус выпустил полностью переписанный код. С вернувшимся именем PHP, но уже сокращенным от «Personal Home Page Construction Kit», это был первый релиз, который мог похвастаться расширенным интерфейсом сценариев. Язык намеренно напоминал Си по структуре, что делал его легким для восприятия разработчиками, знакомыми с Си, Perl и подобными языками. Будучи все еще ограниченными UNIX и POSIX-совместимыми системами, был изучен вопрос для реализации языка в Windows NT.
Код получил еще одно существенное преобразование в апреле 1996 года. Объединив названия предыдущих версий, Расмус представил PHP/FI. Реализации второго поколения начали по-настоящему развивать PHP из набора инструментов в самостоятельный язык программирования. PHP включал в себя встроенную поддержку для DBM, mSQL и Postgres95 баз данных, cookies, поддержку определяемых пользователем функций и многое другое. В июне PHP/FI была присвоена версия 2.0. Интересно, однако, что существовала только одна версия PHP 2.0. Когда она, наконец, в ноябре 1997 года преодолела статус бета-версии, парсер языка был уже полностью переписан.
Несмотря на короткую историю разработки, PHP/FI продолжал набирать популярность в молодом мире веб-разработки. В 1997 и 1998, PHP/FI стал культом для нескольких тысяч пользователей по всему миру. Исследования Netcraft в мае 1998 года показали, что почти 60 тысяч доменов передавали заголовки, содержащие «PHP». Это число равнялось примерно 1% от всех доменов в Интернете в то время. Несмотря на эти впечатляющие цифры, развитие PHP/FI было ограничено: несмотря на нескольких второстепенных участников, в целом он по-прежнему разрабaтывался одним человеком.
Пример #1 Пример кода на PHP/FI
<!--include /text/header.html--> <!--getenv HTTP_USER_AGENT--> <!--ifsubstr $exec_result Mozilla--> Эй, у вас Нетскейп!<p> <!--endif--> <!--sql database select * from table where user='$username'--> <!--ifless $numentries 1--> Извините, такой записи нет<p> <!--endif exit--> Добро пожаловать, <!--$user-->!<p> На вашем счету осталось <!--$index:0--> "кредитов".<p> <!--include /text/footer.html-->
PHP 3
PHP 3.0 был первой версией, напоминающей PHP, каким мы знаем его сегодня. Посчитав PHP/FI 2.0 все еще неэффективным и недостаточно функциональным для использования в коммерческих приложениях, разрабатываемых для их университетского проекта, Энди Гутманс и Зив Сураски из Тель-Авива начали еще раз заново переписывать парсер в 1997 году. Связавшись с Расмусом, они обсудили различные аспекты текущей реализации и их новой разработки PHP. Для улучшения движка и использования уже существующей базы пользователей PHP/FI, Энди, Расмус и Зив решили сотрудничать в развитии нового, независимого языка программирования. Этот совершенно новый язык был выпущен под новым именем, без упоминания о персональном использовании, как в PHP/FI 2.0. Он был назван просто «PHP» — аббревиатура, означающая рекурсивный акроним — PHP: Hypertext Preprocessor.
Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра. Кроме обеспечения пользователей надежной инфраструктурой из множества различных баз данных, протоколов и API, расширяемость PHP 3.0 привлекла к нему множество сторонних разработчиков, желающих добавить к языку свои модули. Возможно, это и был главный ключ к успеху, но стоит добавить, что немаловажным шагом оказалась поддержка ООП синтаксиса и намного более мощного и последовательного синтаксиса самого языка.
В июне 1998 года, со множеством новых разработчиков со всего мира присоединившихся к проекту, PHP 3.0 был представлен новой командой разработчиков, как официальный преемник PHP/FI. Активное развитие PHP/FI 2.0, фактически прекратившееся в ноябре прошлого года, теперь официально закончилось. Примерно через девять месяцев открытого публичного тестирования, при объявлении официального выпуска PHP 3.0, он уже был установлен на более чем 70000 доменах по всему миру, и уже не ограничивается POSIX-совместимыми операционными системами. Относительно небольшая доля доменов с установленным PHP была размещена на серверах под управлением Windows 95, 98 и NT, а также Macintosh. На пике своего развития, PHP 3.0 был установлен приблизительно на 10% веб-серверов в Интернете.
PHP 4
К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зив Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности кодовой базы PHP. PHP 3.0 дал возможность подобным приложениям успешно работать с набором баз данных и поддерживать большое количество различных API и протоколов, но PHP 3.0 не имел качественной поддержки модулей и приложения работали неэффективно.
Новый движок, названный ‘Zend Engine’ (от имен создателей: Zeev и Andi), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принесший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника. Кроме значительного улучшения производительности, PHP 4.0 имел еще несколько ключевых нововведений, таких как поддержка намного большего числа веб-серверов, поддержка HTTP сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.
PHP 5
После долгой разработки и нескольких пре-релизов в июле 2004 был выпущен PHP 5. В основном он управляется ядром Zend Engine 2.0 с новой объектной моделью и множеством различных других нововведений.
Команда разработчиков PHP включает в себя десятки разработчиков, а также десятки других организаций, работающих над связанными с PHP и его поддержкой проектами, такими как PEAR, PECL и документацией, а также базовую инфраструктуру сети более чем из ста серверов на шести из семи континентах мира. Основываясь на статистике прошлых лет, можно с уверенностью предположить, что PHP теперь установлен на десятки или даже, возможно, сотни миллионов доменов по всему миру.
День | — | — |
%a | Сокращенное название дня недели | От Sun до Sat |
%A | Полное название дня недели | От Sunday до Saturday |
%d | Двухзначное представление дня месяца (с ведущими нулями) | От 01 до 31 |
%e | День месяца, с ведущим пробелом, если он состоит из одной цифры. На Windows реализован не так, как описано. Подробнее смотрите ниже. | От 1 до 31 |
%j | Порядковый номер в году, 3 цифры с ведущими нулями | От 001 до 366 |
%u | Порядковый номер дня недели согласно стандарту ISO-8601 | От 1 (понедельник) до 7 (воскресенье) |
%w | Порядковый номер дня недели | От 0 (воскресенье) до 6 (суббота) |
Неделя | — | — |
%U | Порядковый номер недели в указанном году, начиная с первого воскресенья в качестве первой недели | 13 (для полной 13-й недели года) |
%V | Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника | От 01 до 53 (где 53 указывает на перекрывающуюся неделю) |
%W | Порядковый номер недели в указанном году, начиная с первого понедельника в качестве первой недели | 46 (для 46-й недели года, начинающейся с понедельника) |
Месяц | — | — |
%b | Аббревиатура названия месяца, в соответствии с настройками локали | От Jan до Dec |
%B | Полное название месяца, в соответствии с настройками локали | От January до December |
%h | Аббревиатура названия месяца, в соответствии с настройками локали (псевдоним %b) | От Jan до Dec |
%m | Двухзначный порядковый номер месяца | От 01 (январь) до 12 (декабрь) |
Год | — | — |
%C | Двухзначный порядковый номер столетия (год, деленный на 100, усеченный до целого) | 19 для 20-го века |
%g | Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V) | Пример: 09 для недели 6 января 2009 |
%G | Полная четырехзначная версия %g | Пример: 2009 для недели 3 января 2009 |
%y | Двухзначный порядковый номер года | Пример: 09 для 2009, 79 для 1979 |
%Y | Четырехзначный номер года | Пример: 2038 |
Время | — | — |
%H | Двухзначный номер часа в 24-часовом формате | От 00 до 23 |
%k | Часы в 24-часовом формате, с пробелом перед одиночной цифрой | От 0 до 23 |
%I | Двухзначный номер часа в 12-часовом формате | От 01 до 12 |
%l (строчная ‘L’) | Час в 12-часовом формате, с пробелом перед одиночной цифрой | От 1 до 12 |
%M | Двухзначный номер минуты | От 00 до 59 |
%p | ‘AM’ или ‘PM’ в верхнем регистре, в зависимости от указанного времени | Пример: AM для 00:31, PM для 22:23 |
%P | ‘am’ или ‘pm’ в зависимости от указанного времени | Пример: am для 00:31, pm для 22:23 |
%r | То же что и «%I:%M:%S %p» | Пример: 09:34:17 PM для 21:34:17 |
%R | То же что и «%H:%M» | Пример: 00:35 для 12:35 AM, 16:44 для 4:44 PM |
%S | Двухзначный номер секунды | От 00 до 59 |
%T | То же что и «%H:%M:%S» | Пример: 21:34:17 для 09:34:17 PM |
%X | Предпочитаемое отображение времени в зависимости от локали, без даты | Пример: 03:59:16 или 15:59:16 |
%z | Смещение временной зоны относительно UTC. Не реализовано в Windows, подробности см. ниже. | Пример: -0500 для US Eastern Time |
%Z | Аббревиатура временной зоны. Не реализовано в Windows, подробности см. ниже. | Пример: EST для Eastern Time |
Метки даты и времени | — | — |
%c | Предпочитаемое отображение даты и времени, в зависимости от текущей локали | Пример: Tue Feb 5 00:45:10 2009 для 5 февраля 2009 00:45:10 |
%D | То же что и «%m/%d/%y» | Пример: 02/05/09 для 5 февраля 2009 |
%F | То же что и «%Y-%m-%d» (обычно используется в метках времени баз данных) | Пример: 2009-02-05 для 5 февраля 2009 |
%s | Метка времени Эпохи Unix (то же что и функция time()) | Пример: 305815200 для 10 сентября 1979 08:40:00 |
%x | Предпочитаемое отображение даты, без времени | Пример: 02/05/09 для 5 февраля 2009 |
Различное | — | — |
%n | Символ перевода строки («\n») | — |
%t | Символ табуляции («\t») | — |
%% | Символ процента («%») | — |
краткая история языка и скидка 50% на PhpStorm / Блог компании JetBrains / Хабр
Привет, Хабр! Сегодня особенный день — ровно 25 лет назад Расмус Лердорф представил миру PHP. В день рождения языка мы хотим поблагодарить вас за годы его поддержки.Все мы ждем релиза PHP 8, который запланирован на этот декабрь. А пока предлагаем вспомнить достижения PHP-сообщества за прошедшие 25 лет: мы собрали в большой таймлайн все самые важные события из истории языка.
За эти годы пользователи PHP со всего мира сформировали дружное сообщество и богатую экосистему инструментов, ресурсов и мероприятий, которая продолжает развиваться, перенимая лучшие практики и адаптируясь к новым условиям.
Данные таймлайна есть в свободном доступе на GitHub — можете использовать его, как захотите. Если вы заметите ошибку, создайте пулреквест с исправлением. Пока принимаем только опечатки или корректировки дат. Мы очень благодарны всем, кто помог нам в составлении таймлайна.
Кстати, мы тоже недавно праздновали юбилей: PhpStorm 1.0 вышел 27 мая 2010. Да-да, нашей IDE уже десять лет!
В честь праздников мы дарим скидку 50% на персональную подписку на PhpStorm. Акция действует до 10 июня 2020 года, 17:00 МСК. Предложение распространяется как на покупку новой подписки, так и на продление (максимальная скидка при продлении по акции — 50%).
Обновлено: акция закончена, скидка больше недоступна.
Вопросы и ответы
На какие виды подписки распространяется скидка?
Скидка распространяется только на годовые персональные подписки. Если у вас план с ежемесячной оплатой, чтобы воспользоваться предложением, перейдите на годовую подписку.
Моя подписка еще действует. Могу ли я воспользоваться предложением?
Если срок действия вашей подписки истекает раньше, чем через год, вы можете воспользоваться этим предложением и добавить к своей подписке еще один год со скидкой 50% от стоимости подписки за первый год. Вы все равно выигрываете, даже если это ваш третий год.
Могу ли я воспользоваться скидкой, если хочу возобновить подписку?
Да, скидка будет автоматически учтена при возобновлении подписки. Если срок действия вашей подписки истек менее полугода назад, подписка будет возобновлена с даты окончания действия предыдущей подписки — так у вас сохранится скидка за непрерывность.
Будет ли скидка автоматически продлеваться подписка на следующий год?
Нет, стоимость подписки на следующий год рассчитывается по стандартной схеме.
Сколько я заплачу в следующем году за подписку, купленную или продленную сейчас?
При следующем продлении будет действовать стандартная цена. Сейчас цены в магазине JetBrains указаны с учетом скидки.
Могу ли я комбинировать свою скидку за непрерывное продление с этой скидкой 50%?
Нет, скидки не суммируются. Максимальная скидка при продлении — 50%. Если вы пользуетесь PhpStorm третий год, это предложение позволит вам сэкономить 10%, потому что скидка за непрерывность составляет 40%. При этом подписка будет учитываться для расчета скидки за непрерывное продление в следующем году.
В подписку, купленную со скидкой, входит резервная бессрочная лицензия?
Да, подробнее о резервной бессрочной лицензии читайте на сайте.
С любыми вопросами обращайтесь к нам по адресу [email protected], будем рады помочь.
С днем рождения PHP!
Ура!
Асинхронное программирование в PHP в 2019 году — Пятиминутка PHP
В этом выпуске Антон Шабовта, человек, который собаку съел на асинхронном программировании в PHP, рассказывает текущее положение дел в экосистеме, кратко и ёмко про ReactPHP, PHP-PM, swoole, RoadRunner, amphp, ext-async и про свой доклад на PHP Russia 2019.
Антон, привет! Расскажи нам, кто ты, чем ты занимаешься?
Всем привет, меня зовут Антон Шабовта, PHP-разработчик и не только. Последние несколько лет я активно занимаюсь разработкой асинхронных приложений на PHP. В частности, я пишу библиотеки и драйвера, которых мне не хватает в асинхронном мире.
Начнём с основ. Дай краткое определение, что такое асинхронное программирование, что мы под этим понимаем?
С определениями в асинхронном мире всё очень сложно. Есть какие-то формальные штуки и какие-то формальные определения из Википедии, которые говорят нам приблизительно ничего. Но когда мы говорим за асинхронный PHP,то чаще всего мы подразумеваем какой-то асинхронный I/O(ввод-вывод) также, например, как NodeJS.
Сейчас есть некоторое количество библиотек, которое позволяет так или иначе реализовать механизм. Асинхронных вызовов встроенных в PHPпока нету, но мы можем их эмулировать различными методами.
Для себя лично я вижу два определения, что такое асинхронное программирование. Определение первое: это когда наши вызовы и работа с I/O не блокирует поток выполнения. Не блокирует текущую рутину. Второе определение, оно попроще: это когда у нас результат операции доступен не сразу, а через какое-то время, либо не будет доступен вообще.
Мы традиционно уже, пару десятков лет писали сайты различного уровня сложности на PHP без асинхронного программирования. Какие плюсы могло бы дать асинхронное программирование, если мы возьмём какие-то библиотеки сейчас, или если в будущем поддержка появится непосредственно в ядре PHP?
Давайте вспомним историю. Когда-то лет 10 назад у нас был классический LAMP-стек: Linux, Apache, MySQL, PHP. PHPработал тогда в режиме mod_php, что было достаточно небыстро. Но мир менялся и скорость становилась всё более и более критически-важным показателем. У нас появился такой инструмент, как PHP-FPM, который значительно ускорил обработку запросов в PHP, позволил таким сайтам, как Badoo, ещё долго-долго его использовать, а не срочно переписывать на что-то побыстрее. Сейчас скорость требуется всё больше и больше, и текущих инструментов уже не хватает, поэтому идея по использованию асинхронного программирования – это одна из возможностей ускорить обработку запросов и более оптимально утилизировать ресурсы.
Я слышал про такие библиотеки: ReactPHP, swoole, RoadRunner, PHP-PM и ещё некоторые. Частенько они проскакивают в знаменитом PHP-дайджесте на Хабрев разделе «Асинхронный PHP». Но, мне кажется, тут иногда есть некоторая путаница, какие библиотеки действительно занимаются чем-то связанным с асинхронным программированием, а что из этого относится к серверам приложений. Можешь ли ты нам прояснить?
Давайте разберёмся по порядочку, и опять же пойдём от истории.
Первая библиотека, которая позволила писать действительно асинхронные приложения на PHP- это был ReactPHP, который утилизирует концепцию Event loop’aдля обработки сигналов от ОС и представления каких-то результатов для асинхронных операций. Впоследствии для него был написан сервер приложений на самом PHP и называется он PHP-PM. Он работает поверх ReactPHP и контролирует запросы, позволяет нам как-то проще обрабатывать входящие на сервер подключения, и заботится о том, если у нас приложение ReactPHP упадёт, чтобы не умерло полностью всё. То есть PHP-PM, скажем так, супервизор для http-запросов ReactPHP.
Две следующие библиотеки тесно связаны с Go-миром.
Swoole подошёл к этому как к расширению для PHP, и они пытаются из расширения эмулировать PHPработу похожую на Go. То есть они подменяют все вызовы и позволяют работать с какими-то с виду синхронными операциями так как мы работает с асинхронными. Это очень хорошая концепция, она интересная, но для меня Swoole – это, так скажем, непознанный мир, с ним очень сложно в плане документации, библиотека китайская, большинство issue и документации только на китайском, и с этим естественно есть сложности. Если какие-то нюансы возникают в процессе написания приложения на Swoole, найти нужную информацию достаточно сложно.
Теперь переходим к RoadRunner’у. RoadRunner – это разработка Антона Титова. Это попытка сделать первые приложения для PHP на Go. Он имеет малое отношение именно к асинхронной работе, так как внутри весь запрос в RoadRunner’eне является полностью асинхронным. На данный момент скомбинировать подходы и, например, использовать ReactPHP внутри RoadRunner приложений не получится, так как мы будем перезатирать текущий стек, будет исчезать текущая область видимости. Если в RoadRunner мы получаем все наши знакомые PSR-7 request, как-то его обрабатываем, то прокинуть это request в ReactPHP или amphp не получится. И потом не понятно, кому возвращать ответ. Мы с Антоном уже обсудили этот вопрос, и я думаю, что в ближайшем будущем такая возможность всё-таки в RoadRunner появится.
Ещё одна библиотека, которую ты не упомянул, но о которой я буду больше всего говорить – это amphp. Это развитие идеи ReactPHP. Они используют тот же Event loop, но в отличии от ReactPHP, они делают одну замечательную штуку, которая называется корутиной. Делают они поверх генератора и это позволяет писать код, который выглядит как асинхронный, за одним исключением, у нас появляется слово yield перед асинхронными вызовами. Это намного упрощает разработку, у нас исчезает такое понятие, знакомое всем с JS-мира, как callback hell. Сейчас, наверное, это самый актуальный фреймворк для разработки асинхронных приложений на PHP.
Вопрос: если я возьму PHP-PM сервер приложений, внутри у нас ReactPHP, и туда запихну приложение на старом-добром Symfony – оно от этого ведь не становится асинхронным, правильно я понимаю? Мне нужно будет переписать все вызовы к MySQL, все вызовы по работе с файлами на асинхронные аналоги?
Да, конечно. Само приложение не станет асинхронным каким-то магическим образом, так как работа с асинхронными вызовами немножко другая. Но просто обернув Symfony или Lavarel приложенияв ReactPHP мы получим приблизительно тоже, что делает RoadRunner. То есть мы получим асинхронный код запросов и отправку ответов, но внутри у нас всё останется синхронным. То есть мы сэкономим только на Bootstrap’e приложений. Bootstrap, на самом деле для таких фреймворков как Symfony или Lavarel – это значительная часть запросов, процентов 30, а может быть и 40.
А что насчёт Swoole? Ты сказал, что он внутри подменяет вызовы. Значит ли это, что Symfony приложения, которые используют обычные php функции, какой-нибудь file_put_contents(), станет вдруг асинхронным, потому что file_put_contents() подменён в самом Swoole на асинхронный аналог?
Оно подменяет, но нам надо оборачивать любой такой вызов в отдельную функцию, которую Swoole сможет перехватить внутри своего расширения и уже там вызвать асинхронно. Насколько я сейчас вижу, они только экспериментируют сейчас с этим и какого-то однозначного решения до конца пока у них нет.
То есть дописать чуть-чуть код, или переписать код всё равно придётся, что ни бери?
Это основная беда асинхронного программирования, что код к нему надо будет писать с нуля. Вторая вытекающая из этого беда, что мы не сможем использовать любые встроенные и привычные для понимания для php разработчика штуки, такие как PDO, как redis-connection’ы. Нам надо будет использовать асинхронные аналоги, которые написаны на самом PHP и работают с бинарным протоколом или, например, с файлами в асинхронной манере.
А что за расширение еxt-async?
Оно сейчас активно развивается. Релизы выходят достаточно часто. Ext-async – это совместная инициатива всех заинтересованных лиц в асинхронной разработке на PHP. Оно по сути унифицирует работу с какими-то асинхронными примитивами. Если тот же ReactPHP или amphp под капотом могут использовать различные низкоуровневые драйверы, такие как libuv, работы с асинхронными вызовами, то ext-async скрывает определение текущего драйвера в системе подходящего и предоставляет наружу уже готовые примитивы а-ля promise, defer, task и так далее. Следующая версия ReactPHP, кстати, будет уже использовать ext-async под капотом.
А что слышно про ядро PHP? Были какие-то спекуляции на тему, может быть асинхронное программирование появится в ядре?
Все спекуляции начались с письма Зеева Сураски — открытого письма к PHP-комьюнити, о том куда и как будет в дальнейшем развиваться PHP. В письме был очень позитивный посыл и он упоминал много функций, которых все ждут в PHP, в том числе я. Например, я конечно жду асинхронности в ядре.
Но на данный момент у меня большие сомнения насчёт того, что это действительно войдёт в PHP 8, так как это огромный пласт работы, это огромные изменения, которые затрагивают и обратную совместимость, и пока я думаю, что всё-таки мир не совсем готов к таким изменениям. Но хочется верить, и если ребята найдут какое-то действительно красивое решение, для того, чтобы внедрить поддержку того же Event Loop’aна уровне ядра, это будет действительно очень круто. Возможно, нас ждёт некоторые разделение, как это произошло в Python-мире, например, где async/await на Python 3 работает на уровне самого интерпретатора, а в Python 2 он сделан поверх, так же как он сделан у нас сейчас в amphp.
Ты будешь выступать на PHP Russia 2019 с темой про асинхронное программирование. О чём твой доклад, что ты хочешь рассказать?
Да, я буду выступать, за что большое спасибо, что меня приняли в такую глобальную конференцию. Я действительно очень рад этому. Буду рассказывать про асинхронный PHP, про какие-то основы, постараюсь дать понимание процессов, которые за этим стоят, постараюсь объяснить, что это всё не так уж сложно, и это действительно можно использовать уже сейчас и иметь от этого большой профит. А чего не будет в докладе? В докладе не будет каких-то готовых решений. Он скорее направлен на juniorи middle-разработчиков, которые, когда встречают какие-то концепции а-ля promise, defer, корутины в PHP, им сложно с этим разобраться и сложно понять, что же действительно происходит под капотом. Я постараюсь всё это осветить, показать на примерах и, надеюсь, что это как-то поможет PHP-комьюнити быстрее прийти к использованию асинхронных решений в своих проектах.
Спасибо тебе за твою работу, просветительскую в том числе! А что лично ты хотел бы послушать и посмотреть на конференции? Что тебя интересует?
Конечно же, это два топ-спикера из Core PHP команды: Никита Попов и Дмитрий Стогов. Их доклады, обязательны, я считаю, к посещению, потому что они позволят лучше узнать инструмент, с которым мы работает каждый день. Чем лучше мы знаем инструмент, тем лучше мы его можем применять, и это действительно очень круто.
Ещё я хотел бы выделить доклад Антона Титова про RoadRunner, так как это бурнообсуждаемая и активная тема в PHP мире, интересно кто и как его использует. На самом деле, ребята делают очень крутую штуку, взяли лучшее из Go-мира, и из PHP-мира и сумели это соединить.
Да за этим будущее: брать лучшее из всех миров.
К этому нас подталкивает, собственно, всё комьюнити уже последние несколько лет. У нас с каждого утюга слышится про микросервисы, kubernetes, dockerи другие инструменты, которые позволяют нам использовать те технологии, которые нам хочется и объединять их между собой.
php — дата $ + 1 год?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Загрузка…
Получить год от указанной даты php
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Как получить год и месяц из даты —
PHP Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Загрузка…
.Как узнать текущий день года в PHP?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Загрузка…
.