Timeline Taxi Out now: my sci-fi novel Timeline Taxi is published!

PHP 8.2 in 8 code blocks

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

Readonly classes


$rng = $is_production
    ? new Random\Engine\Secure()
    : new Random\Engine\Mt19937(1234);
 
$randomizer = new Random\Randomizer($rng);

$randomizer->shuffleString('foobar');

New random extension


function alwaysFalse(): false
{
    return false;
}

null, true, and false as standalone types


function generateSlug((HasTitle&HasId)|null $post) 
{ /* … */ }

Disjunctive Normal Form Types


trait Foo 
{
    public const CONSTANT = 1;
 
    public function bar(): int 
    {
        return self::CONSTANT;
    }
}

Constants in traits


function connect(
    string $user,
    #[\SensitiveParameter] string $password
) {
    // …
}

Redacted parameters


class Post {}

$post = new Post();

$post->title = 'Name';

// Deprecated: Creation of dynamic property is deprecated

Deprecated dynamic properties


enum A: string 
{
    case B = 'B';
    
    const C = [self::B->value => self::B];
}

Enum properties in const expressions