LINUX.ORG.RU

PHP 8.4 — большое обновление языка

 

PHP 8.4 — большое обновление языка

1

3

Новая версия содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.

Основные изменения

  • Хуки свойств обеспечивают поддержку вычисляемых свойств, которые могут быть понятны IDE и инструментам статического анализа, без необходимости писать DocBlock-комментарии, которые могут не совпадать. Кроме того, они позволяют выполнять надёжную предварительную или последующую обработку значений, без необходимости проверять, существует ли в классе соответствующий геттер или сеттер.
  • Асимметричная область видимости записи свойства теперь может контролироваться независимо от области видимости чтения свойства, что уменьшает необходимость использования шаблонных методов-геттеров для раскрытия значения свойства без возможности его изменения извне класса.
  • Новый атрибут #[\Deprecated] расширяет существующий механизм объявления сущности устаревшей для пользовательских функций, методов и констант классов.
  • Новый DOM API, который поддерживает разбор HTML5-документов в соответствии со стандартами, исправляет несколько давних ошибок в поведении DOM и добавляет несколько функций, делающих работу с документами более удобной. DOM API доступен в пространстве имён Dom. Документы, использующие новый DOM API, могут быть созданы с помощью классов Dom\HTMLDocument и Dom\XMLDocument.
  • Новый объект BcMath\Number позволяет использовать объектно-ориентированный стиль и стандартные математические операторы при работе с числами произвольной точности. Эти объекты неизменяемы и реализуют интерфейс Stringable, поэтому их можно использовать в строковых контекстах, например, echo $num.
  • Добавлены функции array_find(), array_find_key(), array_any() и array_all().
  • Добавлены дочерние классы Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite драйверов, наследующие PDO.
  • К свойствам и методам только что инициализированного объекта теперь можно обращаться, не оборачивая выражение new в круглые скобки. Пример: new MyClass()->method() без скобок.
  • Новые классы, интерфейсы и функции и многое другое…

>>> Подробности

★★

Проверено: CrX ()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от firkax

Я не хейтер, и более того я одобряю пхп, а ты нуб и не умеешь читать.

Как правило когда у людей заканчиваются аргументы и они никак не хотят признать что они наркоманы, они переходят на личности.
КросссафффчЕГ…! Что же мы тут все тупые с тобой спорим? Ай да молодцы лучше нубить будем, да щи лаптем хлебать. Куда нам с мусье в сообразительности тягаться…

Shprot ★★
() автор топика
Последнее исправление: Shprot (всего исправлений: 1)
Ответ на: комментарий от Shprot

Как правило когда у людей заканчиваются аргументы

У тебя они и не начинались, ты выдёргиваешь рандомно пару слов из комментария и сопровождаешь эту цитату пачкой не особо осмысленного бреда. Повторю, научись читать перед тем как отвечать.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Всё! Я обиделся, заплакал и выключил компьютер

Shprot ★★
() автор топика
Ответ на: комментарий от alt-tab-let

Да. Я вообще в php-фреймворках не вкурсе, интересно.

А мне показалось что ты троллишь.

1. Фреймворк - это продукт написанный на языке программирования;

2. Вопрос «если ли продукт написанный на одном языке программирования, под другим языком программирования» - априори абсурден, как абсурдно и сравнение языков по наличию этого продукта. А у тебя на айфоне есть настройки андроида как у меня на ксяоми? Нет? Говно этот твой айфон, даже настроек андроида нет. Примерно твоя логика;

3. Фреймворк - это набор рутинных функций, упрощающий создание конечного продукта и по возможности абстрагирующий разработчика от низкоуровневого кода. Поэтому вопрос твой должен звучать «есть в ли PHP фреймворк, для упрощения разработки приложений класса Х».

Тогда бы мы улыбнулись и ответили, что твой Flask сделан на коленке для школьников, а здесь юзают титанов с мировым именем - Laravel, Symphony, Yii, и еще десяток которые я не помню, потому что PHP использую для написания компонентов ОС.

Одно время я пытался писать на Python'е эти самые компоненты. Неудобно и малопродуктивно. Дебильное разделение блоков, слабый функционал со строками и массивами, включая операторы, невысокая скорость работы достаточно большого кода, отсутствие инклудов в рантайме, и многое другое что упрощает жизнь.

Так что если PHP и С находятся в разных нишах и в принципе не конкурируют друг с другом, то Питону здесь ловить нечего, кроме разве что помочь разрабу быть нитакусиком.

windows10 ★★★★★
()
Ответ на: комментарий от firkax

очевидно что переменная a в данном контексте содержит значение «JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC».
далее, для упоротых - разверну,

a = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC"
a.split(',').each do |t| puts t end

etwrq ★★★★★
()

В пшп уродские методы работы с XML, Domdocument не совместим с XPath.

Плюс, мне в языке не хватает File-Concatenate / inode-merge – я в самодельной CMS симулирую работу БД, и такая функция мне была бы полезна.

Set440
()
Ответ на: комментарий от windows10

Шо самое интересное, хейтят PHP в основном по религиозным причинам.

Совершенно согласен. Ведь всякому истинно верующему должно быть хорошо известно, что единственный Ъ-язык, благодатный Perl, уже был сниспослан нам пророком Ларри Уоллом, и ничего другого человеку не нужно. PHP это не более чем секта еретиков и отщепенцев, которая не смогла узреть свет благодати перловой.

Smacker ★★★★★
()
Ответ на: комментарий от firkax

Родственник перла - это недостаток, а не преимущество. Вопреки перлу вышел хороший язык.

Перл великолепный язык. Он воплощает понятие программистского экуменизма и унитаризма, раскрывая свои объятия для всех, даже тех, кто пишет нечитаемый потом код. Перл рад всем. Во Перле нет греха. И с особым пиететом Перл относится к душеспасительной задаче обработки текста, которая по праву занимает в сердцах всех юниксоидов особое место.

Smacker ★★★★★
()
Ответ на: комментарий от Obezyan

Хуки свойств - подсмотрели у Kotlin

Все всё подсмотрели у ЛИСП из 80-х.

Лично мне больше интересен новый jit-компилятор и ленивые объекты.

no-such-file ★★★★★
()
Ответ на: комментарий от chkalov

непоследовательный дизайн

Можно предъявить любому языку который используется на практике и существует более 10 лет. Хотя бы потому, что даже если автор был гением и использовал академический подход к дизайну языка, то за 10 лет многое поменялось и то что было логичным идеалом, стало странным архаичным говном.

Тот документ, 12-летней давности суммировал опыт использования пыха за предыдущие 10 лет. Итого мы имеем устаревшие на 20 лет тезисы. Любому кто тыкает этим документом можно в ответ тыкать утверждением «640 килобайт хватит всем» и т.п.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от Norgat

сравнивать надо с каким-нибудь python, где будет

Ты не поверишь…

foreach(explode(',', 'JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC') as $m) echo "month = {$m}\n";

Найдите 10 отличий (с)

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от alt-tab-let

Я вообще в php-фреймворках не вкурсе, интересно.

В пыхе щас дрочат на стандарты (PSR), так что можно надёргать разных компонентов через composer и собрать свой условный flask. Для примера можешь потыкать slim или flight.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Так мысль не в этом была, а в том, что сравнивать седан с камазом бессмысленно)

Norgat ★★★★★
()
Ответ на: комментарий от FreeWebber

А теперь давай посчитаем сколько CMS есть на PHP и Python.

Зачем считать количество? Оно описывает только популярность инструмента в период активного создания какого-либо типа решений, а не в текущий момент времени.

Norgat ★★★★★
()
Ответ на: комментарий от windows10

Тогда бы мы улыбнулись и ответили, что твой Flask сделан на коленке для школьников, а здесь юзают титанов с мировым именем - Laravel, Symphony, Yii, и еще десяток которые я не помню, потому что PHP использую для написания компонентов ОС.

Пхп-фреймворки не нужны, в нём всё нужное есть в самом языке. А фреймворки пишут графоманы и каргокультисты других языков.

firkax ★★★★★
()
Ответ на: комментарий от Norgat

ru.php:

<?php
function out() {
echo "Привет, мир";
}
en.php:

<?php
function out() {
echo "Hello, world";
}

index.php:

<?php
$lang = "en";
// Можно сделать сложно
if ($lang=="en") {include("en.php");}
if ($lang=="ru") {include("ru.php");}
// А можно проще
include("$lang.php");
out();

Более того, тупорылый пистон, скорее всего, с вероятностью в 99% скажет в таком случае что-то типа «Функция out() undefined» или что-то в этом роде, еще на этапе запуска, хотя согласно визуально-очевидному алгоритму это неправда.

Но интересно увидеть изящный аналог этого на питоне.

windows10 ★★★★★
()
Ответ на: комментарий от firkax

Пхп-фреймворки не нужны, в нём всё нужное есть в самом языке. А фреймворки пишут графоманы и каргокультисты других языков.

100%, но людям же хочется.

Впрочем в самой концепции фреймворка не вижу ничего плохого. Вот эти которые 3rd-party я не использую, но для своих небольших поделий пишу их как врапперы для того чтобы абстрагироваться от динамически изменяющегося кода.

Условно говоря проще один раз написать функцию типа «select_from» для запроса с БД, юзать ее в коде, и менять во фреймворке в зависимости от версии пыха, а то и типа БД. Чем менять mysql_query на mysqli_query в коде.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Используя пример, что я дал выше:

ru.py

def foo(): print('Привет, мир')

en.py

def foo(): print("Hello, world!")

swap.py

import importlib

def call_foo(lang):
  importlib.import_module(f'{lang}').foo()

call_foo('ru')
call_foo('en')

Вызов:

PS D:\kyc\test> python .\swap.py
Привет, мир
Hello, world!

В примере, файлы ru.py, en.py, swap.py лежат в одной директории. Это все так же можно поменять, как и добавить еще директорий для поиска модулей.

Norgat ★★★★★
()
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от windows10

Хоть не питонист, но навоял. ru.py:

def hello(): print('Привет, мир')

en.py:

def hello(): print('Hello, world')

Через просто import, import_example.py:

#!/usr/bin/env python3

lang = 'ru'
if lang == 'ru':
    from ru import hello
if lang == 'en':
    from en import hello

hello()

Но можно и проще с importlib, importlib_example.py:

#!/usr/bin/env python3

import importlib

lang = 'ru'
mod = importlib.import_module(lang)
mod.hello()

Вообще для меня главным стоппером от питона было то, что нельзя в шаблон встроить текст, например, index.php:

<?php $a = 22; ?>
Текст
<?php $b = 33; ?>

И получается что нужно писать шаблонизатор или корячится со строками и кавычками

FreeWebber
()
Последнее исправление: FreeWebber (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

В школе учить языку программирования вообще не нужно, если это не очень специализированная школа.

Почему люди постоянно смешивают обучение программированию (да, да, те самые алгоритмы и типы данных) с изучением конкретного ЯП? Особливо когда сами уже изучили один-два… десятка ЯП и думают, шо детишки, которые под «программа» понимают «игрулька», смогут учить конкретный ЯП, не понимая, чем ветвление отличается от выбора, поскольку оба два вообще не ведают?!

Уж если шо, то алгоритмы уровня «школота» лучше записываются Паскалем, а типы данные нагляднее конструировать в Луа. Вот только и тут не след забывать, что пособие по языку или пособия по программированию на языке не тождественны пропедевтическому пособию по программированию.

mister_VA ★★
()
Ответ на: комментарий от mister_VA

Ветвление и прочее это все не особо полезно, а вот скрипты для автоматизации какой то деятельности, или работа с готовыми API это полезно в современном мире. Будут следить за курсом биткоина через API Binance, что бы не получать учительскую зарплату.

MOPKOBKA ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.