рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рддрд╛рдЬрд╛ рдЪрдпрдиред рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ: PHPUnit 8 рдФрд░ рдЕрдиреНрдп рд░рд┐рд▓реАрдЬрд╝, рд╕рдореАрдХреНрд╖рд╛ рдЪрд░рдг рдореЗрдВ PSR-14 рдФрд░ PSR-12, PHP рдХреЗ рд▓рд┐рдП JIT, PHP 8 рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛, PHP рдЗрдВрдЯрд░рдиреИрд╢рдирд▓ рд╕реЗ рддрд╛рдЬрд╝рд╛ RFC рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдЕрдЪреНрдЫрд╛ рдкрдврд╝ рд▓реЛ!
рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рд╡рд┐рдЬреНрдЮрдкреНрддрд┐
PHP рдХреЗ рдЖрдВрддрд░рд┐рдХ
- рдПрдХ PHP-7.4 рд╢рд╛рдЦрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ , рдФрд░ PHP рдорд╛рд╕реНрдЯрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЕрдм PHP 8.0 рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ PHP 8.0 рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ PHP 7.4 рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, PHP 8 рдореЗрдВ, рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
- [RFC] JIT - PHP рдореЗрдВ JIT рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд░рд╛рдиреЗ рд╡рд┐рдЪрд╛рд░ рдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рджрд┐рдорд┐рддреНрд░реА рд╕реНрдЯреЛрдЧреЛрд╡ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдкрд╛рдпрд╛ред JIT рдХреЛ OPcache рдХреЗ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рднреА рдЗрд╕реЗ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред PHP 8 рдХреЛ рд▓рдХреНрд╖реНрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ PHP 7.4 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдирд┐рдХрд┐рддрд╛ рдкреЛрдкреЛрд╡ рдХреЗ рдорд╛рдирджрдВрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░, JIT PHP-Parser рдХреЗ рд▓рд┐рдП 30% рдФрд░ amphp / http-server рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 5% рдХреА рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИ ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рд╡рд┐рдВрдбреЛрдЬ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЗрдВрдЯрд░рдиреИрд╢рдирд▓ рдореЗрдВ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИред
рдЗрд╕ рдмреАрдЪ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Docker рдЫрд╡рд┐рдпреЛрдВ (рдзрдиреНрдпрд╡рд╛рдж @dmitrybalabka ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PHP + JIT рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред PHP рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП JIT рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдкреЛрд╕реНрдЯред - [RFC] рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ - рдирд┐рдХрд┐рддрд╛ рдкреЛрдкреЛрд╡ рдХрд╛ рдПрдХ рдФрд░ RFCред рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ PHP 8 рдореЗрдВ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЯрд╛рдЗрдк-рдПрдЕрд░ рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реИрдВ рдЬрдм рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ vorning рдФрд░ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реЗ
null
рдмрдЬрд╛рдп рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рдардмрдЬрд╛рдп:
var_dump(strlen(new stdClass));
рд╣реЛрдЧрд╛:
declare(strict_types=1); var_dump(strlen(new stdClass));
- [RFC] RFC рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдФрд░ рд╡реЛрдЯрд┐рдВрдЧ (2019 рдЕрдкрдбреЗрдЯ) - RFC рд╡реЛрдЯ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдиреМрдХрд░рд╢рд╛рд╣реА рдореЗрдВ рдЖрд▓реЛрдЪрдирд╛рдУрдВ рдХреЗ рддреВрдлрд╛рди рд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реИред рдЗрддрдирд╛ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рд╛рдордиреЗ рдЖрдП рд╣реИрдВред рдЬрд╝реАрд╡ рд╕реБрд░рд╕реНрдХреА рдиреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ ред
- [RFC] рдХрдордЬреЛрд░ рд╕рдВрджрд░реНрдн - рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
WeakReference
рд╡рд░реНрдЧ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рдЗрд╕реЗ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреИрд╢ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред - [RFC] рд╢реВрдиреНрдп рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рд╡рд┐рдЪрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ - рд╡рд╛рд░рд┐рд╕ рддрд░реАрдХреЛрдВ рдореЗрдВ
void
рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ред PHPUnit 8 рдореЗрдВ setUp()
рд╡рд┐рдзрд┐ рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓рдиреЗ рдХреЗ рдирд┐рд╢рд╛рди рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛редрдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда class Foo { function method1 (): void {} function method2 () {} } class Bar extends Foo { function method1 (): array { return []; } function method2 (): array { return []; } } class Baz extends Foo { function method1 () { return 42; } function method2 () { return 42; } }
- [RFC] рдорд┐рд╢реНрд░рд┐рдд рдЯрд╛рдЗрдкрд╣рд┐рдВрдЯ - рдФрд░ рдпрд╣рд╛рдВ рдПрдХ
mixed
рдЯрд╛рдЗрдкрд╣рд┐рдВрдЯ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ (рдпрд╛ рд╡рд╛рдкрд╕) рдХрд░ рд╕рдХрддрд╛ рд╣реИред - [RFC] рдПрдиреЛрдЯреЗрд╢рди 2.0 - рдкреВрд░реНрдг рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдлреНрдЯ рд╕реБрдЭрд╛рд╡ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░рд▓ рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рдЖрдк PhpStorm рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдкрдХрд░рдг
Symfony
Laravel
Yii
Async php
рд╕реАрдПрдордПрд╕
рд╕реАрдЦрдиреЗ рдХреА рд╕рд╛рдордЧреНрд░реА
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдЧрд▓рддреА рдпрд╛ рдЕрд╢реБрджреНрдзрд┐ рджрд┐рдЦрддреА рд╣реИ - рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдкреАрдПрдо рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВред
рдкреНрд░рд╢реНрди рдФрд░ рд╕реБрдЭрд╛рд╡ рдореЗрд▓ рдпрд╛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
PHP рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рдкрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВред
рд▓рд┐рдВрдХ рднреЗрдЬреЗрдВ
рд╕рднреА рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЦреЛрдЬреЗрдВ
тЖР рдкрд┐рдЫрд▓рд╛ рд░рд┐рд▓реАрдЬрд╝: PHP рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдирдВрдмрд░ 148