LINUX.ORG.RU

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

 

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

1

2

Новая версия содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление 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)

выпущен!

Представил как бешеный слон на новых стероидах выпущен из клетки и носится по зоопарку гоняя посетителей, барашек, львов и прочих кенгуру с javascript на серверах.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ладно, бутик посудной лавки в зоопарке.

dataman ★★★★★
()

выпущен

Это хорошая новость или не очень?

PHP

Еще принято глумиться над PHP’шниками или эта традиция отошла уже и удар на себя приняли JS-макаки смузи-фуллстеки?

XOXO
()

а ещё оно (php.net) пытается что-то с броузером снехорошить :-)

или это только мне так повезло ? по старой памяти ткнул php.net, посмотрел на главную, ткнул в документацию..вкладка броузера (яндекс/хроме) умерла, даже обратно на лор никак.

повторил эксперимент - да, вкладка умирает..

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

памяти у вас сударь мало, надо срочно закупать память для согласования с реальностью.

думаете они смогли сделать сайт который невлез в 16Gb ? :-)

MKuznetsov ★★★★★
()
  • Хуки свойств - подсмотрели у Kotlin.
  • Асимметричная область видимости - подсмотрели у Swift.
  • Новый атрибут #[\Deprecated] - подсмотрели у С++.

Далее идет в основном синтаксический сахарок.

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

думаете они смогли сделать сайт который невлез в 16Gb ? :-)

У меня на 128Gb эта страница зависла, после перезапуска проблема ушла. ХЗ что это было.

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

Мне кажется большая часть веба на нём. Оно как java, навечно теперь

LINUX-ORG-RU ★★★★★
()

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

А это уже напоминает какие-то детские обидки за поруганный илитизм: ты шо, я потратил столько времени на изучение моего ЯП, и тут приходит индус, который сделал все то же, что и я, но в пять раз быстрее и в два раза изящнее, попивая свой смузи и попыхивая роскомнадзором. Поэтому дядя начальник будет платить индусу 500 баксов, а не мне 3000, как я мечтал, беда-беда.

Те же кто на нем пишет - просто знают его недостатки (тем более что подавляющая часть их исправима), и спокойно его используют рядом с С, башем и питоном.

А вообще ЯП мерзкий, да. Паскаль лучше.

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

хейтят PHP в основном по религиозным причинам. Ну то есть описать, «почему не PHP» - не могут.

Я так фанатом Ольги Бузовой стал.

Shprot ★★
() автор топика

Хуки свойств

Асимметричная область видимости

уменьшает необходимость использования шаблонных методов-геттеров

Таки исключает, или, всё же - уменьшает? Если второе - то насколько? А вообще - за что боролись, на то и напоролись. Давно ещё в контексе Java читал годную статью насчёт кода, написанного с применением геттеров и сеттеров. Неудивительно, что за последние годы образовалось так много сторонников подхода «Нам ваш этот ООП и н.. не нужон».

при работе с числами произвольной точности.

Мда? А нахрена они тогда типизацию (подобие, прости Господи) завозили чуть ранее?

Добавлены функции array_find(), […]

Ну, мы ещё походим, посмотрим…

Добавлены дочерние классы Pdo\Dblib, […]

Чтобы что? Из dsn убрать с пяток символов?

не оборачивая выражение new в круглые скобки.

Да ну? А я думал (вероятно, лишь ошибочно полагал), что читаемость кода - 90% залога успеха. Ах да, это лишь для тех, кто любит читать чужой код. Среди программистов таких единицы (или нули, лол)

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

. Ну то есть описать, «почему не PHP» - не могут.

Почему же, вот отличная статья, в которой очень детально и, главное, логично расписано, почему не PHP

https://habr.com/en/articles/142140/

Вместо описания можно сразу ссылаться на эту статью.

Она конечно старая, и они что-то исправляют, но главная вещь - непоследовательный дизайн - там же.

P.S. Перевод средний, начиная с того, что автор - девушка, тут оригинал

https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

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

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

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

вот отличная статья, в которой очень детально и, главное, логично расписано, почему не PHP

Статье 12 с половиной лет! Ты считаешь, что за это время в слоне ничего не улучшилось?

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

https://habr.com/en/articles/142140/

Перечитал. Долго смеялся. Извини.

Основная суть претензии: PHP делает не так мы хотим. То чего в %another_lang% не было и не будет. Это как критиковать царапины на Лексусе, сидя в трамвае.

PHP:

$months = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";
$x = explode(",", $months);
for (i = 0; $i<12; i++) {
echo "month = $x[$i] \n";
}

C (stackoverflow):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

char** str_split(char* a_str, const char a_delim)
{
    char** result    = 0;
    size_t count     = 0;
    char* tmp        = a_str;
    char* last_comma = 0;
    char delim[2];
    delim[0] = a_delim;
    delim[1] = 0;

    /* Count how many elements will be extracted. */
    while (*tmp)
    {
        if (a_delim == *tmp)
        {
            count++;
            last_comma = tmp;
        }
        tmp++;
    }

    /* Add space for trailing token. */
    count += last_comma < (a_str + strlen(a_str) - 1);

    /* Add space for terminating null string so caller
       knows where the list of returned strings ends. */
    count++;

    result = malloc(sizeof(char*) * count);

    if (result)
    {
        size_t idx  = 0;
        char* token = strtok(a_str, delim);

        while (token)
        {
            assert(idx < count);
            *(result + idx++) = strdup(token);
            token = strtok(0, delim);
        }
        assert(idx == count - 1);
        *(result + idx) = 0;
    }

    return result;
}

int main()
{
    char months[] = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";
    char** tokens;

    printf("months=[%s]\n\n", months);

    tokens = str_split(months, ',');

    if (tokens)
    {
        int i;
        for (i = 0; *(tokens + i); i++)
        {
            printf("month=[%s]\n", *(tokens + i));
            free(*(tokens + i));
        }
        printf("\n");
        free(tokens);
    }

    return 0;
}

Серьезно?)

Конечно, С-шный код однозначно быстрее, и если бы у меня стоял выбор на чем писать для МК, я бы однозначно выбрал С.

Но мы-то говорим о ЯП в парадигме прикладного программирования.

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

Да даже если улучшилось - его кривость-кососоть не помешала ему захватить большую часть интернета и удерживать её уже больше 10 лет, может даже и все 20. А значит эта кривость-кососоть вообще не виляет на работу и ничтожна. Если бы прям сильно влияла - уже другой язык перехватил бы, благо их немало от Python до того же самого вебного JS.

Да, есть проблемы, как и у вообще всех языков

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

А зачем сравнивать php с Си если сравнивать надо с каким-нибудь python, где будет:

for m in "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC".split(','): print(f'month = {m}')
Norgat ★★★★★
()
Ответ на: комментарий от Shprot

Я хоть тоже ему минус поставил, но ты тоже не прав. В плане дизайна - не улучшилось почти ничего. Что-то даже ухудшилось, но тоже мало. Добавили много всякого ненужного, натыренного из других языков, но к счастью оно всё опциональное. Если б было обязательным - то можно было бы сказать что язык вообще капитально испортили.

Многие (но не все) из претензий в той статье действительно по делу, но, тем не менее, в своей нише пхп - лидер, ничего лучше него в этом плане не придумали.

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

Ну, он все ещё шевелится и на нем много чего написано

Руби пели оды, но он уже помер. А ископаемый пых все ещё жив. Да, он мне не нравится, хоть и родственник перла. Но ведь жив :)

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

Правильно так:

<?php
  $months = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";
  $x = explode(",", $months);
  foreach ($x as $m) echo "month = $m\n";

#include <stdio.h>
int main() {
  char months[] = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";
  char *p, *pp;
  for(p=pp=months; ; p++) {
    if(*p==',' || !*p) {
      printf("month = %.*s\n", (int)(p-pp), pp);
      if(!*p) break;
      pp = p+1;
    }
  }
  return 0;
}
firkax ★★★★★
()
Ответ на: комментарий от router

Да, он мне не нравится, хоть и родственник перла.

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

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

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

Можно ещё и фреймворки добавить, хотя на PHP их уже тоже мало стало, наверное как и на Python, но всё равно скорее всего больше.

Не языком единым - нужны ещё и готовые решения

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

лучше бы в школе PHP обучали

У него словари и ооп сделаны через одно место. Для обучения не очень. Это как биологию изучать по австралийским сумчатым

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

На вкус и цвет все фломастеры разные. Меня как раз от пыха воротит

router ★★★★★
()

Что касается новости, то из перечисленного полезны, вероятно, функции для массивов и классы для Dom, остальное какой-то ненужный хлам и релиз тут только для виду.

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

его кривость-кососоть не помешала ему захватить большую часть интернета и удерживать её уже больше 10 лет, может даже и все 20. А значит эта кривость-кососоть вообще не виляет на работу и ничтожна.

Да нет, это скорее говорит о том, что большей части все равно, даже если что-то криво работает.

Это не только про php, а вообще - большинству не нужны крутые вещи, а попроще и подешевле.

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

Ты верно подметил

попроще и подешевле

это и есть киллерфича пхп которую никто до сих пор не превзошёл.

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

В плане дизайна - не улучшилось почти ничего.

Не совсем понятно. Дизайн наговнокоденного или как выглядит сам код? Разве не CSS отвечает за дизайн?

Добавили…натыренного из других языков

Ха…! Покажи мне ЯП в котором есть своя уникальность! У всех примитивные типы данных, условные пореаторы, массивы и т.д. Разница только в синтаксисе.

Как бы Вы, все хейтеры пихи не скорбили, пиха - лучшая для веба!

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

Основная суть претензии: PHP делает не так мы хотим.

Там много чего, но основная - плохой дизайн, собстно статья так и называется.

И там речь о скорости не идёт,

PHP не просто неудобен в использовании, плохо мне подходит, субоптимален или не соответствует моим религиозным убеждениям. Я могу рассказать вам много хороших вещей о языках, которых я стараюсь избегать, и много плохих вещей о языках, которые мне нравятся. Вперёд, спрашивайте! Получаются интересные обсуждения. PHP — единственное исключение. Фактически каждая деталь PHP в какой-то мере поломана. Язык, структура, экосистема: всё плохо. И даже нельзя указать на одну убийственную вещь, настолько дефект систематичный. Каждый раз, когда я пытаюсь систематизировать недостатки PHP, я теряюсь в поиске в глубину обнаруживая всё больше и больше ужасных мелочей(отсюда фрактал).

Но лучше просто прочитать, не хочу сюда все это копипастить.

А вообще

if this list doesn’t hurt your opinion of PHP, nothing ever will, so stop arguing with some dude on the Internet and go make a cool website in record time to prove me wrong :)

chkalov
()
Ответ на: комментарий от Shprot

Дизайн (не тот что ты думаешь, смотри толковый словарь) языка а не визуальный дизайн html-страниц.

Ха…! Покажи мне ЯП в котором есть своя уникальность

Ты опять ничего не понял. Проблема не в том что натырили а в том что для пхп оно почти всё чужеродное и ненужное.

Как бы Вы, все хейтеры

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

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

А зачем сравнивать php с Си если сравнивать надо с каким-нибудь python, где будет:

Затем что кроме этого одного (из десятков) примера, есть еще и другие, ты шо будешь на каждый пример находить удобный ЯП для него?

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

Чем это проще то? Тем что ты строку, занимающую больше половины места, вынес куда-то в невидимое место?

firkax ★★★★★
()
Ответ на: комментарий от etwrq
foreach(explode(',',$a) as $m) echo "$m\n";

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

firkax ★★★★★
()

Пишу на плюсах, но к пыху отношусь очень положительно, потому что синтакс понятный сишнику.

А что есть выкинуть из браузеров жабаскрипт и засунуть заместо неё пыху? Не было ещё таких расширений? :)

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

это всё было давно по дизайну в ruby, потом скопипастили в другие языки - мол, «а вроде удобно, а почему бы и нет?»

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

Что «это»? Ты о чём? Ты можешь связно мысли излагать?

Напомню, диалог начался с PHP 8.4 — большое обновление языка (комментарий) где ты сказал «на руби ещё проще» и в доказательство привёл действительно сильно более короткий код, только вот укоротил ты его исключительно за счёт того что строку «JAN,FEB,...», занимавшую половину места, заменил на переменную 'a' неуказанного содержимого, и тут выбор языка очевидно ни при чём.

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

Массивы там одни из лучших, а ООП в школе не особо надо.

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