PHP 8.3: Динамическое получение констант класса и Enum
Итак, PHP 8.3 позволит написать вот такой код:
И ничего не сломается, а как вы помните раньше динамически получить доступ к константе можно было только через:
Теперь в PHP 8.3 код будет валиден и выполняться как ожидается.
Более подробно в новом посте https://sergeymukhin.com/blog/php-83-dinamiceskoe-poluchenie-konstant-klassa-i-enum
Итак, PHP 8.3 позволит написать вот такой код:
class Invoice {
public const STATUS_COMPLETE = "complete";
}
$constName = "STATUS_COMPLETE";
echo Invoice::{$constName}; //"complete"И ничего не сломается, а как вы помните раньше динамически получить доступ к константе можно было только через:
echo \constant("MyClass::$constName");Теперь в PHP 8.3 код будет валиден и выполняться как ожидается.
Более подробно в новом посте https://sergeymukhin.com/blog/php-83-dinamiceskoe-poluchenie-konstant-klassa-i-enum
Sergeymukhin
PHP 8.3: Динамическое получение констант класса и Enum
PHP 8.3 и более поздние версии получат поддержку получение констант класса и элементов Enum через переменную с названием константы
Хей здорово гайз!
Хочу поделиться с вами, что ежедневный траффик моего блога на сайте ~200 человек, не считая одноразовых всплесков в 600-1000 человек из тематических каналов телеграма, типа Laravel и др.
Но я хочу довести эту цифру до 1000, это в идеале конечно, но хотя бы до 500 уников в день, увеличив текущую аудиторию в 2 раза (это на сайте, в канале мы пока уютно сидим в 21 человек))
Так вот как показывает практика 1 статья в месяц или даже в два не способствует выполнению этого плана, поэтому я решил немного сменить стратегию, ну может и себя немного подстегнуть в написании текстов, так вот хочу попробовать писать чаще, как минимум статью в неделю, а лучше наверное две.
В рамках выполнения плана был сделан редизайн сайта, и созданы комментарии, чтобы больше контактировать со своей аудиторией, собирать потребность народа в информации и готовить под это новые темы статей.
Поэтому завершаю эту неделю статьей о функции array_merge_recursive, чуть ниже, а от вас жду комментариев, хоть в канале к посту, хоть на сайте в статье
https://sergeymukhin.com/blog/funkciia-array-merge-recursive-v-php
Всем хороших выходных!
Хочу поделиться с вами, что ежедневный траффик моего блога на сайте ~200 человек, не считая одноразовых всплесков в 600-1000 человек из тематических каналов телеграма, типа Laravel и др.
Но я хочу довести эту цифру до 1000, это в идеале конечно, но хотя бы до 500 уников в день, увеличив текущую аудиторию в 2 раза (это на сайте, в канале мы пока уютно сидим в 21 человек))
Так вот как показывает практика 1 статья в месяц или даже в два не способствует выполнению этого плана, поэтому я решил немного сменить стратегию, ну может и себя немного подстегнуть в написании текстов, так вот хочу попробовать писать чаще, как минимум статью в неделю, а лучше наверное две.
В рамках выполнения плана был сделан редизайн сайта, и созданы комментарии, чтобы больше контактировать со своей аудиторией, собирать потребность народа в информации и готовить под это новые темы статей.
Поэтому завершаю эту неделю статьей о функции array_merge_recursive, чуть ниже, а от вас жду комментариев, хоть в канале к посту, хоть на сайте в статье
https://sergeymukhin.com/blog/funkciia-array-merge-recursive-v-php
Всем хороших выходных!
Sergeymukhin
Функция array_merge_recursive в PHP
Давайте поговорим о такой интересной функции как array_merge_recursive и пообсуждаем что же она делает
Обычно 8 марта не пишу каких-либо постов, это либо общие праздники типа нового года (хотя в этом году тоже забегался и не написал пост), либо тот же день разработчика,
Но как минимум в наших рядах есть одна девушка @YuliaYgorevna и я думаю нам не сложно от всего мужского коллектива нашего канала поздравить ее (а если есть ещё и другие подписчики-девушки, то и их тоже) с этим прекрасным днём, и пожелать чистого неба над головой, и всегда дарить своим близким лучи радости и красоты!
Все отдыхают в праздник или кто-то работает?)
Я например все пытаюсь добить пост с внятным объяснением генераторов с yield. Надеюсь скоро опубликую. 😀
Но как минимум в наших рядах есть одна девушка @YuliaYgorevna и я думаю нам не сложно от всего мужского коллектива нашего канала поздравить ее (а если есть ещё и другие подписчики-девушки, то и их тоже) с этим прекрасным днём, и пожелать чистого неба над головой, и всегда дарить своим близким лучи радости и красоты!
Все отдыхают в праздник или кто-то работает?)
Я например все пытаюсь добить пост с внятным объяснением генераторов с yield. Надеюсь скоро опубликую. 😀
👍2🔥1
Какой он PHP в 2023 году?
Наверное ежегодный пост о том, стоит ли изучать PHP в новом 2023 году будет не совсем актуален для тех, кто уже давно работает с PHP. А скорее полезен для новичков, кто только собирается "Войти в айти", но может кто-то что-то и почерпнет из него)
Начнем пожалуй с PHP Foundation, прошло чуть более года с момента создания фонда, на текущий момент коллектив состоит из 10 волонтеров и 6 разработчиков, которым платят за работу над языком PHP. Можно твердо сделать выводы, что PHP Foundation - одно из лучших событий, произошедших с PHP за долговое время, и можно надеяться что в 2023 году они смогут улучшить язык еще больше.
Далее перейдем к последней версии языка на сегодняшний момент PHP 8.2. Хоть он и является наименее запоминающимся релизом, но тем не менее имеет множество приятных функций, напомню про пару интересных штук:
- Классы только для чтения
- Совершенно новый рандомизатор
- Самостоятельные типы null, true и false
- Типы дизъюнктивных нормальных форм
- Возможность редактировать параметры
Стоит упомянуть что менеджер пакетов PHP - Packagist сейчас содержит 361 000 пакетов, что на 60 000 больше, чем в прошлом году.
Поскольку мы заговорили об экосистеме, нельзя не упомянуть два крупнейших PHP-фреймворка на сегодняшний день: Laravel и Symfony. Хоть ваш покорный слуга любит и использует в большинстве своих проектов более специфический фреймворк Phalcon, я не могу не отдать должное тому как за последние годы значительно вырос Laravel.
Ну и напоследок можно пофантазировать о будущем развитии языка, например, многие функции, такие как дженерики, не могут быть реализованы в PHP, пока он поддерживает runtime-проверки типов, есть предложения сделать некое надмножество PHP с поддержкой IDE и статического анализатора. То есть этакой аналог Typenoscript. Вы могли слышать об этом, например тот же PXP, который может пойти в интересном для разработчиков направлений.
более подробная статистика в новом посте https://sergeymukhin.com/blog/php-v-2023-godu
Наверное ежегодный пост о том, стоит ли изучать PHP в новом 2023 году будет не совсем актуален для тех, кто уже давно работает с PHP. А скорее полезен для новичков, кто только собирается "Войти в айти", но может кто-то что-то и почерпнет из него)
Начнем пожалуй с PHP Foundation, прошло чуть более года с момента создания фонда, на текущий момент коллектив состоит из 10 волонтеров и 6 разработчиков, которым платят за работу над языком PHP. Можно твердо сделать выводы, что PHP Foundation - одно из лучших событий, произошедших с PHP за долговое время, и можно надеяться что в 2023 году они смогут улучшить язык еще больше.
Далее перейдем к последней версии языка на сегодняшний момент PHP 8.2. Хоть он и является наименее запоминающимся релизом, но тем не менее имеет множество приятных функций, напомню про пару интересных штук:
- Классы только для чтения
- Совершенно новый рандомизатор
- Самостоятельные типы null, true и false
- Типы дизъюнктивных нормальных форм
- Возможность редактировать параметры
Стоит упомянуть что менеджер пакетов PHP - Packagist сейчас содержит 361 000 пакетов, что на 60 000 больше, чем в прошлом году.
Поскольку мы заговорили об экосистеме, нельзя не упомянуть два крупнейших PHP-фреймворка на сегодняшний день: Laravel и Symfony. Хоть ваш покорный слуга любит и использует в большинстве своих проектов более специфический фреймворк Phalcon, я не могу не отдать должное тому как за последние годы значительно вырос Laravel.
Ну и напоследок можно пофантазировать о будущем развитии языка, например, многие функции, такие как дженерики, не могут быть реализованы в PHP, пока он поддерживает runtime-проверки типов, есть предложения сделать некое надмножество PHP с поддержкой IDE и статического анализатора. То есть этакой аналог Typenoscript. Вы могли слышать об этом, например тот же PXP, который может пойти в интересном для разработчиков направлений.
более подробная статистика в новом посте https://sergeymukhin.com/blog/php-v-2023-godu
👍3
Всех с праздником веб-мастера! Поменьше багов, лагов и пр. проблем, совсем без них жить не получится)
Сегодня в день праздника поговорим немного о психологии, а именно о синдроме самозванца.
Синдром самозванца - это внутренний психологический опыт ощущения себя фальшивым в какой-то области своей жизни, несмотря на все успехи, которых вы достигли в этой области. У вас может быть синдром самозванца, если вы обнаружите, что постоянно испытываете неуверенность в себе, даже в тех областях, где вы обычно преуспеваете. Синдром самозванца может ощущаться как беспокойство и нервозность и может проявляться в виде негативного внутреннего диалога. Симптомы тревоги и депрессии часто сопровождают синдром самозванца.
Среди разработчиков/айтишников/программистов данный синдром достаточно распространенное явление. По некоторым источникам, которые мне попадались, себя недооценивают более 60% активных людей.
Синдром самозванца можно разделить на пять (иногда в других областях выделяют и больше типов) основных типов:
- Перфекционист
- Эксперт
- Природный гений
- Солист
- Суперчеловек
Некоторые общие характеристики синдрома самозванца включают в себя:
- Неспособность реально оценить свою компетентность и навыки
- Приписывание успеха внешним факторам
- Недовольство своим выступлением
- Страх, что вы не оправдаете ожиданий
- Сверхдостижение
- Саботирование собственного успеха
- Неуверенность в себе
- Постановка очень сложных целей и чувство разочарования, когда вы их не достигаете
У некоторых людей синдром самозванца может подпитывать мотивацию к достижению, но обычно это происходит за счет постоянного беспокойства. Вы можете чрезмерно готовиться или работать намного усерднее, чем это необходимо, например, чтобы "убедиться", что никто не узнает, что вы "мошенник". В конце концов тревога усугубляется и может привести к депрессии.
Чтобы избавиться от синдрома самозванца, полезно начать задавать себе несколько трудных вопросов. Вот некоторые из них:
Какие основные убеждения я придерживаюсь о себе?
Верю ли я, что достоин быть таким какой я есть?
Должен ли я быть совершеннее, чтобы другие одобряли меня?
Помните, что если вы чувствуете себя самозванцем, это означает, что вы добились определенного успеха в своей области, который вы приписываете удаче. Вместо этого попытайтесь превратить это чувство в чувство благодарности. Посмотрите на то, чего вы достигли в своей жизни, и будьте благодарны за свои достижения.
более подробно в статье https://sergeymukhin.com/blog/s-prazdnikom-404
Сегодня в день праздника поговорим немного о психологии, а именно о синдроме самозванца.
Синдром самозванца - это внутренний психологический опыт ощущения себя фальшивым в какой-то области своей жизни, несмотря на все успехи, которых вы достигли в этой области. У вас может быть синдром самозванца, если вы обнаружите, что постоянно испытываете неуверенность в себе, даже в тех областях, где вы обычно преуспеваете. Синдром самозванца может ощущаться как беспокойство и нервозность и может проявляться в виде негативного внутреннего диалога. Симптомы тревоги и депрессии часто сопровождают синдром самозванца.
Среди разработчиков/айтишников/программистов данный синдром достаточно распространенное явление. По некоторым источникам, которые мне попадались, себя недооценивают более 60% активных людей.
Синдром самозванца можно разделить на пять (иногда в других областях выделяют и больше типов) основных типов:
- Перфекционист
- Эксперт
- Природный гений
- Солист
- Суперчеловек
Некоторые общие характеристики синдрома самозванца включают в себя:
- Неспособность реально оценить свою компетентность и навыки
- Приписывание успеха внешним факторам
- Недовольство своим выступлением
- Страх, что вы не оправдаете ожиданий
- Сверхдостижение
- Саботирование собственного успеха
- Неуверенность в себе
- Постановка очень сложных целей и чувство разочарования, когда вы их не достигаете
У некоторых людей синдром самозванца может подпитывать мотивацию к достижению, но обычно это происходит за счет постоянного беспокойства. Вы можете чрезмерно готовиться или работать намного усерднее, чем это необходимо, например, чтобы "убедиться", что никто не узнает, что вы "мошенник". В конце концов тревога усугубляется и может привести к депрессии.
Чтобы избавиться от синдрома самозванца, полезно начать задавать себе несколько трудных вопросов. Вот некоторые из них:
Какие основные убеждения я придерживаюсь о себе?
Верю ли я, что достоин быть таким какой я есть?
Должен ли я быть совершеннее, чтобы другие одобряли меня?
Помните, что если вы чувствуете себя самозванцем, это означает, что вы добились определенного успеха в своей области, который вы приписываете удаче. Вместо этого попытайтесь превратить это чувство в чувство благодарности. Посмотрите на то, чего вы достигли в своей жизни, и будьте благодарны за свои достижения.
более подробно в статье https://sergeymukhin.com/blog/s-prazdnikom-404
Sergeymukhin
С праздником 404 или "синдром самозванца"!
4 апреля отмечается неофициальный профессиональный праздник - День веб-мастера.
👍1
Из новых RFC PHP 8.3: Поправки для классов и свойств только для чтения из https://wiki.php.net/rfc/readonly_amendments
В этом RFC было предложено два изменения, но было принято только одно: возможность повторной инициализации свойств только для чтения во время клонирования. Правда этот RFC касается только конкретного (но важного) случая: перезапись значений свойств внутри __clone(), чтобы разрешить глубокое клонирование свойств только для чтения:
В этом RFC было предложено два изменения, но было принято только одно: возможность повторной инициализации свойств только для чтения во время клонирования. Правда этот RFC касается только конкретного (но важного) случая: перезапись значений свойств внутри __clone(), чтобы разрешить глубокое клонирование свойств только для чтения:
readonly class Post
{
public function __construct(
public DateTime $createdAt,
) {}
public function __clone()
{
$this->createdAt = new DateTime();
// так можно,
// даже не смотря на то что свойство createdAt только для чтения.
}
}
PHP 8.3: Анонимные классы только для чтения
Ранее нельзя было пометить анонимные классы как доступные только для чтения. Это исправлено в PHP 8.3:
Ранее нельзя было пометить анонимные классы как доступные только для чтения. Это исправлено в PHP 8.3:
$class = new readonly class {
public function __construct(
public string $foo = 'bar',
) {}
};Кстати, на днях, вышла новая версия кодинг стайла для PHP PER 2.0.0, в которой были исправлены проблемы предыдущей версии, а так же были обновлены правила для нового синтаксиса PHP, такие, как например:
- добавлен раздел с описанием nowdoc и heredoc
- добавлен раздел о коротких замыканиях
- добавлены правила о конечных запятых
- обновлен раздел ключевых слова-модификаторов abstract/final
- перефразировали «MUST… no» на «MUST NOT… any»
- добавлен раздел о перечислениях
- добавлена спецификация стиля цепочки методов
- добавлено руководство по стилю атрибутов
- описание именованных аргументов
- уточнение правил пустых операторов
более подробные примеры оформления кода можно посмотреть в посте https://sergeymukhin.com/blog/reliz-psr-per-200
- добавлен раздел с описанием nowdoc и heredoc
- добавлен раздел о коротких замыканиях
- добавлены правила о конечных запятых
- обновлен раздел ключевых слова-модификаторов abstract/final
- перефразировали «MUST… no» на «MUST NOT… any»
- добавлен раздел о перечислениях
- добавлена спецификация стиля цепочки методов
- добавлено руководство по стилю атрибутов
- описание именованных аргументов
- уточнение правил пустых операторов
более подробные примеры оформления кода можно посмотреть в посте https://sergeymukhin.com/blog/reliz-psr-per-200
Sergeymukhin
Релиз PER кодстайл 2.0.0
Эта спецификация расширяет и заменяет PSR-12 и требует соблюдения базового стандарта кодирования PSR-1.
👍1🔥1
День добрый, давно не виделись)
У меня для вас есть несколько обновленных rfc в PHP 8.3:
Типизированные константы класса
теперь, наконец-то, можно будет указывать типы констант класса:
Раньше, если у вас был пустой массив, и вы добавите элемент с отрицательным индексом, а затем добавите еще один элемент, этот второй элемент всегда будет начинаться с индекса 0:
Будет использоваться, чтобы показать намерение программиста: "Я знаю, что этот метод переопределяет родительский метод. Если это когда-либо изменится, сообщите мне".
более подробно почему не все довольны этим rfc в новом посте https://sergeymukhin.com/blog/php-83-atribut-override
У меня для вас есть несколько обновленных rfc в PHP 8.3:
Типизированные константы класса
теперь, наконец-то, можно будет указывать типы констант класса:
class FooОтрицательные индексы в массивах
{
public const string A = 'a';
public const int B = 1;
public const float C = 1.1;
public const bool D = true;
public const array E = ['a', 'b'];
}
Раньше, если у вас был пустой массив, и вы добавите элемент с отрицательным индексом, а затем добавите еще один элемент, этот второй элемент всегда будет начинаться с индекса 0:
$array = [];Начиная с PHP 8.3, следующий элемент будет добавлен в index -4:
$array[-5] = 'a';
$array[] = 'b';
var_export($array);
//array (
// -5 => 'a',
// 0 => 'b',
//)
//array (Ну и напоследок спорное решение в виде атрибут #[Override]
// -5 => 'a',
// -4 => 'b',
//)
Будет использоваться, чтобы показать намерение программиста: "Я знаю, что этот метод переопределяет родительский метод. Если это когда-либо изменится, сообщите мне".
более подробно почему не все довольны этим rfc в новом посте https://sergeymukhin.com/blog/php-83-atribut-override
Sergeymukhin
PHP 8.3: Атрибут #[Override]
В PHP 8.3 появился новый атрибут #[Override]. Он уже известен в других языках, но позвольте мне рассказать, для чего он нужен, если вы не знаете.
👍5
Уязвимость OpenSSL USN-6119-1
Мэтт Касвелл обнаружил, что OpenSSL можеть неправильно обрабатывать определенные идентификаторы объектов ASN.1.
Уязвимость заключается в том, что злоумышленник может использовать эту проблему, чтобы удаленно заставить OpenSSL потреблять сильно ресурсы, что приведет систему к отказу в обслуживании. (CVE-2023-2650)
OpenSSL неправильно обрабатывает расшифровку шифра AES-XTS на 64-битных платформах ARM. Эта проблема затрагивает 18.04 LTS, 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 22.10 и Ubuntu 23.04. (CVE-2023-1255)
Инструкции по обновлению:
sudo pro fix USN-6119-1
Результатом будет чек лист пофиксенных или пропущенных USN
Проблему можно решить, обновив систему до следующих версий пакетов:
Ubuntu 23.04:
libssl3 3.0.8-1ubuntu1.2
Ubuntu 22.10:
libssl3 3.0.5-2ubuntu2.3
Ubuntu 22.04 LTS:
libssl3 3.0.2-0ubuntu1.10
Ubuntu 20.04 LTS:
libssl1.1 1.1.1f-1ubuntu2.19
Ubuntu 18.04 LTS:
libssl1.0.0 1.0.2n-1ubuntu5.13
libssl1.1 1.1.1-1ubuntu2.1~18.04.23
CVE, содержащиеся в этом USN, включают: CVE-2023-1255, CVE-2023-2650.
Мэтт Касвелл обнаружил, что OpenSSL можеть неправильно обрабатывать определенные идентификаторы объектов ASN.1.
Уязвимость заключается в том, что злоумышленник может использовать эту проблему, чтобы удаленно заставить OpenSSL потреблять сильно ресурсы, что приведет систему к отказу в обслуживании. (CVE-2023-2650)
OpenSSL неправильно обрабатывает расшифровку шифра AES-XTS на 64-битных платформах ARM. Эта проблема затрагивает 18.04 LTS, 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 22.10 и Ubuntu 23.04. (CVE-2023-1255)
Инструкции по обновлению:
sudo pro fix USN-6119-1
Результатом будет чек лист пофиксенных или пропущенных USN
Проблему можно решить, обновив систему до следующих версий пакетов:
Ubuntu 23.04:
libssl3 3.0.8-1ubuntu1.2
Ubuntu 22.10:
libssl3 3.0.5-2ubuntu2.3
Ubuntu 22.04 LTS:
libssl3 3.0.2-0ubuntu1.10
Ubuntu 20.04 LTS:
libssl1.1 1.1.1f-1ubuntu2.19
Ubuntu 18.04 LTS:
libssl1.0.0 1.0.2n-1ubuntu5.13
libssl1.1 1.1.1-1ubuntu2.1~18.04.23
CVE, содержащиеся в этом USN, включают: CVE-2023-1255, CVE-2023-2650.
👍1🤯1
Всем привет, у меня тут подъехал второй отчет в 2023 году об используемых версий PHP:
Как можно заметить процент использования новой версии PHP 8.2 растет и это радует)
более полная информация и красивые диаграммы в новом посте https://sergeymukhin.com/blog/statistika-versii-php-vypusk-20232
Как можно заметить процент использования новой версии PHP 8.2 растет и это радует)
более полная информация и красивые диаграммы в новом посте https://sergeymukhin.com/blog/statistika-versii-php-vypusk-20232
Sergeymukhin
Статистика версий PHP - выпуск 2023.2
Второй отчет в 2023 году об используемых версий PHP
👍5
Ребят, мы тут зарелизили #Phalcon 5.2.3.
По большей части были проведены исправления, особенно большой рефакторинг коснулся работы с json, изменены все методы json_encode/json_decode в пользу классов Phalcon\Support\Helper\Json\Encode и Phalcon\Support\Helper\Json\Decode.
- Класс Phalcon\Di\Injectable был расширен от stdClass для удаления предупреждения об устаревании динамических свойств для PHP 8.2
- Исправлен тип возврата Phalcon\Mvc\View::getVar()
- Исправлен Phalcon\Http\Request::getJsonRawBody для защиты от пустого тела запроса
- Добавлен метод getAdapter() в Phalcon\Mvc\Model\Metadata для получения адаптера внутреннего кеша при необходимости
- Добавлен новый адаптер Phalcon\Storage\Adapter\Weak, реализованный с #WeakReference, для кэширования/извлечения объектов, еще не собранных сборщиком мусора
Кто использует фреймворк в работе можете обновиться https://github.com/phalcon/cphalcon/releases/tag/v5.2.3
По большей части были проведены исправления, особенно большой рефакторинг коснулся работы с json, изменены все методы json_encode/json_decode в пользу классов Phalcon\Support\Helper\Json\Encode и Phalcon\Support\Helper\Json\Decode.
- Класс Phalcon\Di\Injectable был расширен от stdClass для удаления предупреждения об устаревании динамических свойств для PHP 8.2
- Исправлен тип возврата Phalcon\Mvc\View::getVar()
- Исправлен Phalcon\Http\Request::getJsonRawBody для защиты от пустого тела запроса
- Добавлен метод getAdapter() в Phalcon\Mvc\Model\Metadata для получения адаптера внутреннего кеша при необходимости
- Добавлен новый адаптер Phalcon\Storage\Adapter\Weak, реализованный с #WeakReference, для кэширования/извлечения объектов, еще не собранных сборщиком мусора
Кто использует фреймворк в работе можете обновиться https://github.com/phalcon/cphalcon/releases/tag/v5.2.3
GitHub
Release v5.2.3 · phalcon/cphalcon
5.2.3 (2023-07-26)
Fixed
Tried to reproduce the behavior described in #16244 but had no success. #16244
Extended Phalcon\Di\Injectable from stdClass to remove the deprecation warning (dynamic prop...
Fixed
Tried to reproduce the behavior described in #16244 but had no success. #16244
Extended Phalcon\Di\Injectable from stdClass to remove the deprecation warning (dynamic prop...
👍4
Хорошего начала недели, пусть это и будет уже вторник)
Итак, небольшое дополнение к RFC PHP8.3:
Но до PHP 8.3 попытка создать псевдоним для встроенного класса PHP приводила к исключению ValueError:
Начиная с PHP 8.3 можно использовать псевдонимы для встроенных классов и интерфейсов и данный код отработает корректно.
Итак, небольшое дополнение к RFC PHP8.3:
class_alias() теперь поддерживает псевдонимы встроенных классов PHP, как вы помните функция class_alias() создает псевдоним для переданного класса. Класс с псевдонимом ведет себя точно так же, как исходный класс.Но до PHP 8.3 попытка создать псевдоним для встроенного класса PHP приводила к исключению ValueError:
class_alias('stdClass', 'MyClass');
class_alias('Traversable', 'NewTraversableInterface');
ValueError: class_alias(): Argument #1 ($class) must be a user-defined class name, internal class name givenНачиная с PHP 8.3 можно использовать псевдонимы для встроенных классов и интерфейсов и данный код отработает корректно.
👍2
Всех с пятницей!
Наконец, получилось закончить пост, который начал еще до отпуска недели 2 назад)
Надеюсь он будет полезен как новичкам, так и бывалым разработчикам для поднятия #docker контейнеров #Redis кластера.
https://sergeymukhin.com/blog/kak-ispolzovat-redis-cluster-dlia-keshirovaniia
Наконец, получилось закончить пост, который начал еще до отпуска недели 2 назад)
Надеюсь он будет полезен как новичкам, так и бывалым разработчикам для поднятия #docker контейнеров #Redis кластера.
https://sergeymukhin.com/blog/kak-ispolzovat-redis-cluster-dlia-keshirovaniia
Sergeymukhin
Как использовать Redis Cluster для кэширования
В этом посте мы рассмотрим, как мы можем использовать Redis в качестве провайдера кеша для нашего приложения, и по мере дальнейшего изучения мы увидим, как кластер Redis может обеспечить нам большую масштабируемость и надежность
👍4🐳1
С началом недели!
Итак, Новая функция mb_str_pad в PHP 8.3.
В PHP различные строковые функции доступны в двух вариантах: один для байтовых строк, а другой для многобайтовых строк (mb). Однако заметным отсутствием среди многобайтовых строковых функций mbstring является эквивалент str_pad(). В функции str_pad() отсутствует поддержка многобайтовых символов, что вызывает проблемы при работе с языками, использующими многобайтовые кодировки, такие как UTF-8. Этот RFC предлагает добавить в PHP такую функцию, которую мы будем называть mb_str_pad():
Итак, Новая функция mb_str_pad в PHP 8.3.
В PHP различные строковые функции доступны в двух вариантах: один для байтовых строк, а другой для многобайтовых строк (mb). Однако заметным отсутствием среди многобайтовых строковых функций mbstring является эквивалент str_pad(). В функции str_pad() отсутствует поддержка многобайтовых символов, что вызывает проблемы при работе с языками, использующими многобайтовые кодировки, такие как UTF-8. Этот RFC предлагает добавить в PHP такую функцию, которую мы будем называть mb_str_pad():
function mb_str_pad(
string $string,
int $length,
string $pad_string = " ",
int $pad_type = STR_PAD_RIGHT,
?string $encoding = null,
): string {}
var_dump(str_pad('Проверка', 10, '_', STR_PAD_RIGHT)); // Выведет: string(8) "Проверка"
// Тут же посчитается все верно и выведет два конечных __ после слова
var_dump(mb_str_pad('Проверка', 10, '_', STR_PAD_RIGHT));// string(10) "Проверка__"👍5👏2
Впереди вечер пятницы и выходные!
И можно почитать небольшой пост, по решению ошибки ERR_HTTP2_PROTOCOL_ERROR
Если у вас на сайте периодически стали выдаваться ошибки ERR_HTTP2_PROTOCOL_ERROR по запросу ресурса, и погуглить в интернете то многие сайты выдают стандартный набор советов, для простого пользователя, которые никак не касаются разработки.
Выполнить их, конечно можно, и проблема как пользователя возможно будет решена, но если вы разработчик/девопс и после деплоя приложения на сервере у вас возникает данная проблема, то одними такими действиями вы себе не поможете.
В конфиге вашего виртуального хоста nginx скорее всего есть такие директивы (или определены по умолчанию):
Как обычно с картинками и более подробным описанием в новом посте https://sergeymukhin.com/blog/kak-ispravit-osibku-err-http2-protocol-error-v-brauzere
И можно почитать небольшой пост, по решению ошибки ERR_HTTP2_PROTOCOL_ERROR
Если у вас на сайте периодически стали выдаваться ошибки ERR_HTTP2_PROTOCOL_ERROR по запросу ресурса, и погуглить в интернете то многие сайты выдают стандартный набор советов, для простого пользователя, которые никак не касаются разработки.
Выполнить их, конечно можно, и проблема как пользователя возможно будет решена, но если вы разработчик/девопс и после деплоя приложения на сервере у вас возникает данная проблема, то одними такими действиями вы себе не поможете.
В конфиге вашего виртуального хоста nginx скорее всего есть такие директивы (или определены по умолчанию):
fastcgi_buffer_size 4k;Вот как раз нехватка размера буфера и приводит к данной ошибке ERR_HTTP2_PROTOCOL_ERROR в ответ на запрос ресурсов. Следовательно увеличив размера буфера, например x2:
fastcgi_buffers 8 4k;
fastcgi_buffer_size 16k;В принципе все)
fastcgi_buffers 8 16k;
Как обычно с картинками и более подробным описанием в новом посте https://sergeymukhin.com/blog/kak-ispravit-osibku-err-http2-protocol-error-v-brauzere
Sergeymukhin
Как исправить ошибку ERR_HTTP2_PROTOCOL_ERROR в браузере
Если у вас на сайте периодически стали выдаваться ошибки ERR_HTTP2_PROTOCOL_ERROR по запросу ресурса, то милости прошу под кат
👍3🔥1
Всем привет и с 1 сентября!
Хоть и прошло много лет, а в груди все еще ёкает при наступлении первого числа осени!)
Итак, можно сказать уже последние RFC перед релизом
PHP 8.3: PHP CLI Lint (php -l) поддерживает проверку нескольких файлов одновременно
Как вы знали (или узнаете сейчас) PHP в CLI предоставляет функцию Linting, которая проверяет переданное имя файла на наличие синтаксических ошибок. Это полезно для быстрой проверки PHP-файла или фрагмента перед выполнением.
До PHP 8.3 было невозможно выполнить анализ нескольких файлов PHP за один вызов; независимо от количества предоставленных файлов, PHP CLI анализирует только первый файл:
- Если файл был недоступен, код выхода будет 1.
- Если какой-либо из файлов не удалось валидировать, код выхода будет 255.
- Если присутствуют оба условия ошибки, код выхода будет 1.
Помимо передачи нескольких имен файлов по отдельности, также можно использовать шаблон glob для проверки нескольких файлов:
Хоть и прошло много лет, а в груди все еще ёкает при наступлении первого числа осени!)
Итак, можно сказать уже последние RFC перед релизом
PHP 8.3: PHP CLI Lint (php -l) поддерживает проверку нескольких файлов одновременно
Как вы знали (или узнаете сейчас) PHP в CLI предоставляет функцию Linting, которая проверяет переданное имя файла на наличие синтаксических ошибок. Это полезно для быстрой проверки PHP-файла или фрагмента перед выполнением.
До PHP 8.3 было невозможно выполнить анализ нескольких файлов PHP за один вызов; независимо от количества предоставленных файлов, PHP CLI анализирует только первый файл:
php -l somefile.phpНачиная с PHP 8.3, можно передавать несколько файлов PHP, и PHP CLI проверяет их все за один вызов:
// No syntax errors detected in somefile.php
php -l somefile.php otherfile.phpЕсли линтер обнаруживает какие-либо ошибки в любом из предоставленных файлов, он показывает ошибку и переходит к остальной части списка. Если какой-либо из файлов не прошел проверку, он выдает ошибку:
// No syntax errors detected in somefile.php
// No syntax errors detected in otherfile.php
- Если файл был недоступен, код выхода будет 1.
- Если какой-либо из файлов не удалось валидировать, код выхода будет 255.
- Если присутствуют оба условия ошибки, код выхода будет 1.
Помимо передачи нескольких имен файлов по отдельности, также можно использовать шаблон glob для проверки нескольких файлов:
php -l src/*.php src/**/*.php
🎉4👍2❤1
Всем большой привет!
Итак, первое, поздравляю всех с профессиональным праздником Днем Программиста (как вы помните это 256 день)
Второе, сегодня мой день рождения, потому праздную я вдвойне можно сказать 😄 и у меня для вас есть интересная информация напрямую от одного из главных контрибьюторов PHP Дмитрия Стогова о новом JIT-движке, который будет использоваться в следующих версиях PHP.
Как вы знаете JIT появился в PHP 8.0 и представлял из себя компиляцию "на лету" - Just In Time, так же вы вероятно знаете, что PHP является интерпретируемым языком, он не компилирует программы в прямом смысле этого значения, как, например это делают C или Rust.
Чтобы включить JIT нужно было указать несколько параметров конфига php.ini.
Новый JIT движок PHP
Дмитрий Стогов поделился информацией в internal рассылках PHP о новом JIT-движке, который будет использоваться в следующих мажорных версиях PHP. Теперь это настоящий оптимизирующий компилятор с промежуточным представлением, аналогичный серверному компилятору Java HotSpot.
Он создает основу для будущих улучшений и устраняет многие низкоуровневые детали существующего PHP JIT. Вместо поддержки ассемблерного кода для разных процессоров теперь PHP генерирует один IR и передает его независимому от PHP JIT-движку.
Новая реализация JIT основана на IR-Lightweight JIT Compilation Framework и в отличии от старого JIT-подхода в PHP 8.*, который генерирует собственный код непосредственно из байт-кода PHP, эта реализация генерирует промежуточное представление (IR) и делегирует все задачи более низкого уровня в IR Framework. IR для JIT похож на абстрактное синтаксическое дерево (AST) для компилятора.
По сравнению с классическими оптимизирующими компиляторами (такими как GCC и LLVM), IR Framework использует очень короткий конвейер оптимизации. В сочетании с компактным IR-представлением это делает его чрезвычайно быстрым и позволяет генерировать довольно хороший машинный код за разумное время.
Более подробно и с примерами в новом посте https://sergeymukhin.com/blog/novyi-jit-dvizok-dlia-php-84-i-php-9
Итак, первое, поздравляю всех с профессиональным праздником Днем Программиста (как вы помните это 256 день)
Второе, сегодня мой день рождения, потому праздную я вдвойне можно сказать 😄 и у меня для вас есть интересная информация напрямую от одного из главных контрибьюторов PHP Дмитрия Стогова о новом JIT-движке, который будет использоваться в следующих версиях PHP.
Как вы знаете JIT появился в PHP 8.0 и представлял из себя компиляцию "на лету" - Just In Time, так же вы вероятно знаете, что PHP является интерпретируемым языком, он не компилирует программы в прямом смысле этого значения, как, например это делают C или Rust.
Чтобы включить JIT нужно было указать несколько параметров конфига php.ini.
Новый JIT движок PHP
Дмитрий Стогов поделился информацией в internal рассылках PHP о новом JIT-движке, который будет использоваться в следующих мажорных версиях PHP. Теперь это настоящий оптимизирующий компилятор с промежуточным представлением, аналогичный серверному компилятору Java HotSpot.
Он создает основу для будущих улучшений и устраняет многие низкоуровневые детали существующего PHP JIT. Вместо поддержки ассемблерного кода для разных процессоров теперь PHP генерирует один IR и передает его независимому от PHP JIT-движку.
Новая реализация JIT основана на IR-Lightweight JIT Compilation Framework и в отличии от старого JIT-подхода в PHP 8.*, который генерирует собственный код непосредственно из байт-кода PHP, эта реализация генерирует промежуточное представление (IR) и делегирует все задачи более низкого уровня в IR Framework. IR для JIT похож на абстрактное синтаксическое дерево (AST) для компилятора.
По сравнению с классическими оптимизирующими компиляторами (такими как GCC и LLVM), IR Framework использует очень короткий конвейер оптимизации. В сочетании с компактным IR-представлением это делает его чрезвычайно быстрым и позволяет генерировать довольно хороший машинный код за разумное время.
Более подробно и с примерами в новом посте https://sergeymukhin.com/blog/novyi-jit-dvizok-dlia-php-84-i-php-9
🎉7👍2