Небольшая памятка: Новинки php 8

08.11.2020

Учитывая сколько сейчас пишут про новинки php версии 8, данная заметка будет очередной каплей в море, но хочу оставить ее "на память" :-)

  1. Выражение Match - RFC: Match expression v2

    Замена

     
    switch ($this->lexer->lookahead['type']) {
        case Lexer::T_SELECT:
            $statement = $this->SelectStatement();
            break;
     
        case Lexer::T_UPDATE:
            $statement = $this->UpdateStatement();
            break;
     
        case Lexer::T_DELETE:
            $statement = $this->DeleteStatement();
            break;
     
        default:
            $this->syntaxError('SELECT, UPDATE or DELETE');
            break;
    }
    

    на

     
    $statement = match ($this->lexer->lookahead['type']) {
        Lexer::T_SELECT => $this->SelectStatement(),
        Lexer::T_UPDATE => $this->UpdateStatement(),
        Lexer::T_DELETE => $this->DeleteStatement(),
        default => $this->syntaxError('SELECT, UPDATE or DELETE'),
    };
    

  2. Adding Meta Data Using Attributes - надо разобраться

  3. Promoted Properties - constructor promotion

    Замена

     
    class Point {
        public float $x;
        public float $y;
        public float $z;
     
        public function __construct($x = 0.0, $y = 0.0, $z = 0.0)
        {
            $this->x = $x;
            $this->y = $y;
            $this->z = $z;
        }
    }
    

    на

     
    class Point {
        public function __construct(
            public float $x = 0.0,
            public float $y = 0.0,
            public float $z = 0.0,
        ) {
          // ...
        }
    }
    

  4. Named arguments:

     
    class MyCalss
    {
      function __construct(string $a, string $b, int $c) 
      {
         // ...
      }
    }
    
    $aValues = [
        'a' => 'A',
        'b' => 'B',
        'c' => 11,
    ];
    
    $oTMP = new MyCalss(... $aValues);
    

  5. Union types - Union Types 2.0

     
    class MyCalss
    {
    
    }
    
    function myFunction(string|array|MyCalss|null $mixed) {
        // $mixed
    }
    
    myFunction(new MeClass());
    

    Новое для php 8: MyCalss и null

  6. nullsafe operator - Nullsafe operator

     
    $aRes = Post::getById(10)->dt_created->format('d.m.Y');
    

    - а что если getById не вернет запись?

    Безопасный вариант:

     
    $aRes = Post::getById(10)?->dt_created?->format('d.m.Y');
    

    Если любая часть вернет null, то дальше цепочка не будет вызываться и вернет в переменную $aRes - null

    Еще более полезный вариант, с проверкой на null:

     
    $aRes = Post::getById(10)?->dt_created?->format('d.m.Y') ?? 'Error getById, or...';
    

  7. Improved Exceptions - throw expression и non-capturing catches

    Было

     
    try{
        throw new Exception();
    } catch (Exception $exception) {
        echo 'Exception catched<br />';
    }
    

    Стало возможно:

     
    try{
        $trigger = fn() => throw new Exception();
        $trigger();
    } catch (Exception) {
        echo 'Exception catched<br />';
    }
    

  8. Object classnames:

    Было:

     
    class MyClass {
        
    }
    
    echo MyClass::class;
    

    Стало возможным:

     
    class MyClass {
        
    }
    
    $oTmp = MyClass;
    echo $oTmp::class;
    

  9. The Stringable interface - Add Stringable interface

     
    class MyClass {
        public function __toString() : string
        {
            return 'String';
        }
    }
    
    function myFunction(string|Stringable $mixed){
        return (string) $mixed;
    }
    
    echo myFunction(new MyClass());
    

    По сути добавление метода __toString, добавлет классу интерфейс Stringable

  10. Добавлены 3и новых функции для работы со строками: str_contains, str_starts_with и str_ends_with

    str_contains и Add str_starts_with() and str_ends_with() functions
  11. Класс WeakMap - WeakMap

    Не совсем уверен является ли он частью ядра phph 8, т.к. указано (PECL weakref >= 0.2.0)

    Если кратко - то можно использовать объекты как люючи "массива" (тут не Array а именно WeakMap)

     
    $wm = new WeakMap();
    
    $oTMP = new StdClass;
    
    $wm[$oTMP ] = '123';
    
    

  12. Добавленеи последней запятой в перечень аргументов функции / метода:

     
    function myFunction(
        $a,
        $b,
        $c,
    ){
        // ...
    }
    

    $c,


Категории: PHP
Пометки: глоссарий, php 8
Яндекс.Метрика