Home >headlines >Never stopping to move forward, PHP8.1 brings 8 important new changes!

Never stopping to move forward, PHP8.1 brings 8 important new changes!

藏色散人
藏色散人Original
2021-11-10 16:21:014546browse

"php is the best language in the world", it never stops moving forward! The PHP team has currently released PHP 8.1.0 RC 5 version, and the next version will be the sixth and final release candidate (RC 6), which will be released in the near future. Let me introduce to you the 8 important new changes in PHP8.1, let’s take a look first!

1、Enums

enum Status
{
    case draft;
    case published;
    case archived;
    
    public function color(): string
    {
        return match($this) 
        {
            Status::draft => 'grey',   
            Status::published => 'green',   
            Status::archived => 'red',   
        };
    }
}

2、Readonly properties

class PostData
{
    public function __construct(
        public readonly string $title,
        public readonly string $author,
        public readonly string $body,
        public readonly DateTimeImmutable $createdAt,
        public readonly PostState $state,
    ) {}
}

3、New in initializers

class PostStateMachine
{
    public function __construct(
        private State $state = new Draft(),
    ) {
    }
}

4、Fibers, a.k.a. "green threads")

$fiber = new Fiber(function (): void {
    $valueAfterResuming = Fiber::suspend('after suspending');
    
    // … 
});
 
$valueAfterSuspending = $fiber->start();
 
$fiber->resume('after resuming');

5、Array unpacking also supports string keys

$array1 = ["a" => 1];
$array2 = ["b" => 2];
$array = ["a" => 0, ...$array1, ...$array2];
var_dump($array); // ["a" => 1, "b" => 2]

6、First class callables

function foo(int $a, int $b) { /* … */ }
$foo = foo(...);
$foo(a: 1, b: 2);

7、Pure intersection types

function generateSlug(HasTitle&HasId $post) {
    return strtolower($post->getTitle()) . $post->getId();
}

8、New array_is_list function(The new array_is_list function)

$list = ["a", "b", "c"];
array_is_list($list); // true
$notAList = [1 => "a", 2 => "b", 3 => "c"];
array_is_list($notAList); // false
$alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"];
array_is_list($alsoNotAList); // false

This article is a translation, original address: https://stitcher.io/blog/php-81-in-8-code-blocks

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn