PHP 8 рдХреЛрдб рдХреЗ рдЖрда рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ

PHP 8 рдореЗрдВ рдмрд╣реБрдд рд╕реА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╣рдо рд╕рдмрд╕реЗ рдЙрддреНрдХреГрд╖реНрдЯ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред

рдЕрд╕реНрд╡реАрдХрд░рдг: рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдЫрд▓реЗ PHP рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдХреЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдерд╛ред рдпрджрд┐ рдЖрдк рднрд╛рд╖рд╛ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдореВрд▓ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдп рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлреБрдЯрдиреЛрдЯ рд╣реИрдВред

рд╕рдордп


use \Support\Attributes\ListensTo;

class ProductSubscriber
{
    <<ListensTo(ProductCreated::class)>>
    public function onProductCreated(ProductCreated $event) { /* тАж */ }

    <<ListensTo(ProductDeleted::class)>>
    public function onProductDeleted(ProductDeleted $event) { /* тАж */ }
}

рдбреЙрдХрдмреНрд▓реЙрдХ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред

рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд╣ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗ рдпрд╛ рдЙрдореНрдореАрдж рдереАред рд╢рд╛рдпрдж рдЖрдк @, @:, рдпрд╛ рдбреЙрдХрдмреНрд▓реЙрдХреНрд╕, рдпрд╛ рдХреБрдЫ рдФрд░ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╡рд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рд╣реЛрдЧрд╛ред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдПрдХрдорд╛рддреНрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдХреНрдпреЛрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдЗрд╕рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ RFC рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЖрдВрддрд░рд┐рдХ рдШрдЯрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ RFC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред



рджреЛ


public function foo(Foo|Bar $input): int|float;

public function bar(mixed $input): mixed;

рд╕рдВрдпреЛрдЬрди рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рднреА рд╣реИ рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред



рддреАрди


interface Foo
{
    public function bar(): static;
}

рдЖрдк рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЪрд╛рд░


[JIT]
opcache.jit=5

рдирд┐рд░реНрдорд┐рдд рдореЗрдВ JIT рд╕рдВрдХрд▓рдХред

JIT рдХреНрдпрд╛ рд╣реИ?

"рдЬреЗрдЖрдИрдЯреА" рдХрд╛ рдЕрд░реНрде "рд╕рд╣реА рд╕рдордп рдкрд░" - "рд╕рд╣реА рд╕рдордп рдкрд░" рд╣реИред рдЖрдк рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ PHP рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИ: рдЗрд╕реЗ C, Java рдпрд╛ Rust рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ - рдРрд╕рд╛ рдХреБрдЫ рдЬрд┐рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордЭрддрд╛ рд╣реИ - рд░рдирдЯрд╛рдЗрдо рдкрд░ред

"JIT" рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреЛрдб рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛрдб рдХреЗ "рдХреИрд╢реНрдб рд╕рдВрд╕реНрдХрд░рдг" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВред

рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдмреЗ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ



рдкрд╛рдВрдЪ


$triggerError = fn() => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

рдлреЗрдВрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЫрд╣


try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрд╡рд╛рдж рдЪрд░ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред



рд╕рд╛рдд


public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // тАж
}

рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЖрда


str_contains('string with lots of words', 'words');

str_starts_with('haystack', 'hay');

str_ends_with('haystack', 'stack');

рдирдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдиред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдирд╛рдо рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред
рдЪрд▓реЛ рдЦреБрдж рдХреЛ рдореВрд░реНрдЦ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ: рдХреЛрдб рдХреЗ 8 рдмреНрд▓реЙрдХ PHP 8 рдореЗрдВ рд╕рднреА рдорд╣рд╛рди рдирдИ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ, рдЪрд▓рд┐рдП рдХреБрдЫ рдФрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред



рдиреМ


function bar(Stringable $stringable) { /* тАж */ }

рдПрдХ рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ __toString () рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред



рджрд╕


$object::class

рдХреЙрд▓рд┐рдВрдЧ :: рдХреНрд▓рд╛рд╕ рд╕реАрдзреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗред



All Articles