Как PHP превращается в Java/C#

что было добавлено
(на подходе дженерики, асинхронщина аля Node.js и JIT компиляция)

Hack, PHP-подобный язык программирования общего назначения со статической типизацией, не стал популярным, несмотря на авторов: Facebook

PHP 8

Добавлена поддержка атрибутов (аннотаций)

Добавлена поддержка типов union
public function setNumber(int|float $number): void

Добавлены WeakMap
С WeakMaps ссылки на объекты автоматически собираются сборщиком мусора, когда объект становится недоступен.
$this->cache = new WeakMap();

return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);

Новое исключение ValueError

При определении функций можно использовать вариативный аргумент
public function method(int $many, string $parameters, $here)
extends A {
public function method(…$everything) {

Возвращаемый тип static
public function doWhatever(): static {
return $this;
}

Литерал имени класса для объекта
Теперь можно извлекать имя класса объекта с помощью $object::class. Результат будет такой же, как в случае с get_class($object).

Настройки синтаксиса переменных
New и instanceof теперь можно использовать с произвольными выражениями: new (выражение)(…$args) и $obj instanceof (выражение).
$class = new (collect([‘Foo’, ‘Bar’])->random());

Интерфейс Stringable
В PHP 8 появился новый интерфейс Stringable, который добавляется автоматически, как только класс реализует метод __toString

Трейты могут определять абстрактные приватные методы
trait MyTrait {
abstract private function neededByTheTrait(): string;

throw можно использовать как выражение
Выражение throw теперь можно использовать там, где допускаются только выражения: в стрелочных функциях, coalesce-операторах тернарных условных операторах (ternary/elvis).
$callable = fn() => throw new Exception();
$value = $nullableValue ?? throw new \InvalidArgumentException();

В параметрах списка допускается опциональная висящая запятая
function method_with_many_arguments($a, $b, $c, $d, )
method_with_many_arguments(1, 2, 3, 4,);

Обработка исключений без сохранения в переменной
} catch (\InvalidArgumentException) {

Добавлена поддержка типа mixed
В PHP 8 появился новый тип mixed. Он может быть эквивалентен типам array, bool, callable, int, float, null, object, resource, string.

Добавлена поддержка продвижения свойств конструктора
public function __construct(
public int $id,
public string $name,
) {}

Добавлена поддержка выражения match
Предложено добавить новое выражение match, которое аналогично switch, только с более безопасной семантикой и возможностью возвращать значения.

Добавлена поддержка оператора nullsafe (?->)
$country = $user?->getAddress()?->country?->iso_code;

Добавлена поддержка именованных аргументов
array_fill(start_index: 0, num: 100, value: 50);
https://habr.com/ru/company/mailru/blog/525614/

PHP 7.3

Добавлен новый оператор объединения с null

Объявления скалярных типов

Объявления типов возвращаемых значений

Интерфейс Throwable

Обнуляемые типы

Ничего не возвращающие функции

Синтаксис квадратных скобок для деструктуририрующего присваивания в массиве

Видимость констант класса

PHP 7.2

Новый тип object
function test(object $obj) : object

Разрешено переопределение абстрактных методов
abstract function test(string $s);
extends A
{
abstract function test($s) : int;

Sodium теперь является основным модулем
Добавлено хеширование пароля с помощью Argon2

PHP 7.1

Обнуляемые типы
function answer(): ?int

Ничего не возвращающие функции
function shouldreturnnothing(): void

Псевдотип Iterable

Closure из callable
public static function fromCallable(callable $callable) : Closure

Синтаксис квадратных скобок для деструктуририрующего присваивания в массиве
[$a, $b, $c] = $array;
[“a” => $a, “b” => $b, “c” => $c] = $array;

Видимость констант класса

Перехват нескольких типов исключений

PHP 7.0
Повышение производительности
PHP 7 почти вдвое быстрее, чем PHP 5.6.

Значительное сокращение использования памяти
PHP 7.0 стал громадным шагом вперед с точки зрения производительности и использования памяти. Для страницы с запросами к базе данных версия 7.0.0 более чем в 3 раза быстрее, чем 5.6 с включенным opcache в 2.7 раза быстрее без opcache! С точки зрения использования памяти разница тоже существенная!
https://habr.com/ru/company/otus/blog/524270/

Интерфейс Throwable

Поддержка анонимных классов

Добавлен новый оператор объединения с null – «??»
$x[“a”] ?? $x[“b”] ?? $x[“c”]

Добавлен новый оператор – spaceship (космический корабль) (<=>)
return $a <=> $b; // return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);

Объявления скалярных типов
add(float $a, float $b): float

Объявления типов возвращаемых значений
Добавлена возможность возвращать типы помимо скалярных – классы, включая наследование

Групповые объявления use

Делегация генератора
В теле функций генераторов разрешен следующий новый синтаксис
yield from

Синтаксис кодирования Unicode — “\u{xxxxx}”

Чувствительный к контексту лексер
С этим нововведением глобально зарезервированные слова стали полу-зарезервированными

Выражения return в генераторах

Единый синтаксис переменных https://wiki.php.net/rfc/uniform_variable_syntax

Добавить комментарий

HTML отключен, используйте Markdown. Размещение кода: [pastebin id=fs23] или [gistgit id=2926827] или [gistgit id=2926827 file=foo.txt]