PHP 8.1 програмчлалын хэлний хувилбар

Жилийн турш хөгжүүлсний дараа PHP 8.1 програмчлалын хэлийг танилцуулав. Шинэ салбар нь хэд хэдэн шинэ функцууд, түүнчлэн нийцтэй байдлыг зөрчсөн хэд хэдэн өөрчлөлтийг багтаасан болно.

PHP 8.1-ийн гол сайжруулалтууд:

  • Тооллогын дэмжлэгийг нэмсэн. Жишээлбэл, та одоо дараах бүтцийг ашиглаж болно: enum Status { case Pending; тохиолдол идэвхтэй; архивлагдсан хэрэг; } class Post { нийтийн функц __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Гүйцэтгэх хэлхээг бага түвшинд удирдах боломжийг олгодог Fibers нэртэй хөнгөн утаснуудын дэмжлэгийг нэмсэн. Fiber дэмжлэгийг Aphp болон ReactPHP хүрээнүүдэд нэмэхээр төлөвлөж байна. $fiber = new Fiber(функц (): void { $valueAfterResuming = Fiber::suspend('түдгэлзүүлсний дараа'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('үргүүлсний дараа');
  • Объект кодын кэш (opcache)-ийн хэрэгжилт сайжирч, ангийн удамшлын талаарх мэдээллийг кэшлэх боломжтой болсон. Оновчлол нь зарим програмын гүйцэтгэлийг 5-8% -иар нэмэгдүүлэх боломжтой болсон. Бусад оновчлолд JIT ажиллагааг оновчтой болгох, ARM64 архитектурт JIT дэмжлэг үзүүлэх (AAarch64), нэрийн нягтралыг хурдасгах, timelib болон ext/date сангуудыг оновчтой болгох, цуваажуулалт болон цувралаас ангижруулах ажиллагааг нэмэгдүүлэх, get_declared_classes(), explode() оновчлох зэрэг орно. , strtr() функц, strrnatcmp(), dechex(). Ерөнхийдөө Symfony Demo-ийн гүйцэтгэл 23.0%, WordPress-ийн хувьд 3.5% өссөн байна.
  • Шинэ массивыг тодорхойлохдоо байгаа массивыг орлуулах боломжийг олгодог "...$var" массив доторх задлах оператор нь мөрийн товчлууруудыг дэмжих зорилгоор өргөтгөсөн (өмнө нь зөвхөн дижитал танигчийг дэмждэг байсан). Жишээлбэл, та одоо кодонд ашиглаж болно: $array1 = [“a” => 1]; $массив2 = ["b" => 2]; $массив = [“a” => 0, …$массив1, …$массив2]; var_dump($ массив); // ["a" => 1, "b" => 2]
  • "Шинэ" түлхүүр үгийг анхдагч параметр болгон функцийн тодорхойлолт эсвэл аргументийн шинж чанарууд гэх мэт эхлүүлэгчид ашиглахыг зөвшөөрдөг. анги MyController { нийтийн функц __construct(хувийн бүртгэл $logger = шинэ NullLogger(), ) {} }
  • Зөвхөн уншигдах хандалтад зориулж ангийн шинж чанарыг тэмдэглэх боломжтой (ийм шинж чанарууд дахь мэдээллийг зөвхөн нэг удаа бичиж болно, дараа нь өөрчлөх боломжгүй). class PostData { нийтийн функц __construct( нийтийн уншигдах мөр $ гарчиг, зөвхөн нийтийн уншигдах DateTimeImmutable $ огноо, ) {} } $шуудлын = шинэ Нийтлэл('Гарчиг', /* … */); $post->title = 'Бусад'; > Алдаа: Зөвхөн унших шинж чанарыг өөрчлөх боломжгүй Post::$title
  • Дуудаж болох объектуудад шинэ синтакс хэрэгжсэн - одоо функцийг дуудаж, түүнд "..." утгыг аргумент болгон (жишээ нь Closure::fromCallable('myFunc) оронд myFunc(...)) өгөх замаар хаалтыг үүсгэж болно. ')): функц foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Уулзваруудын төрлүүдэд бүрэн дэмжлэг нэмсэн нь одоо байгаа уулзваруудыг нэгтгэн шинэ төрлүүдийг үүсгэх боломжийг танд олгоно. Хоёр буюу түүнээс дээш төрлийн цуглуулгыг тодорхойлдог нэгдлийн төрлөөс ялгаатай нь огтлолцлын төрлүүд нь жагсаасан төрлүүдийн аль нь ч биш, харин багцад заасан бүх төрлүүдийг бөглөхийг шаарддаг. function generateSlug(HasTitle&HasId $post) { буцаана strtolower($post->getTitle()) . $post->getId(); }
  • "Хэзээ ч" гэсэн шинэ төрөл байдаг бөгөөд энэ нь статик анализаторуудад функц нь програмын гүйцэтгэлийг зогсоох болно, жишээлбэл, онцгой тохиолдол гаргах эсвэл гарах функцийг гүйцэтгэх замаар. функц dd(холимог $ оролт): хэзээ ч { гарах; }
  • array_is_list гэсэн шинэ функцийг санал болгосон бөгөөд энэ нь массив дахь товчлууруудыг 0-ээс эхлэн тоон утгыг нэмэгдүүлэх дарааллаар байрлуулж байгааг тодорхойлох боломжийг олгодог: $list = [“a”, “b”, “c”]; массив_жагсаалт($жагсаалт); // үнэн $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; массив_жагсаалт($nAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; массив_жагсаалт($мөнNotAList); // худал
  • Та одоо "эцсийн" түлхүүр үгийг ашиглан эцэг эхийн ангийн тогтмолуудыг дарж бичихээс сэргийлж болно. class Foo { final public const X = "foo"; } анги Bar өргөтгөл Foo { public const X = "bar"; > Гайхалтай алдаа: Bar::X нь эцсийн тогтмол Foo::X-ийг дарж чадахгүй }
  • fsync болон fdatasync функцууд нь дискний кэшээс өөрчлөлтүүдийг хүчээр хадгалахыг санал болгож байна. $файл = fopen("sample.txt", "w"); fwrite($файл, "Зарим контент"); if (fsync($file)) { echo "Файл дискэнд амжилттай хадгалагдлаа."; } fclose($файл);
  • Өмнө нь хэрэглэж байсан "0" угтвараас гадна наймт тоонд "0o" ба "0O" угтварыг ашиглах боломжийг нэмсэн. 016 === 0o16; // үнэн 016 === 0O16; // үнэн
  • $GLOBALS-ийн хэрэглээг сонгон хязгаарлахыг санал болгож байгаа бөгөөд энэ нь хоцрогдсон нийцтэй байдлыг зөрчихөд хүргэдэг боловч массивтай ажиллах ажиллагааг ихээхэн хурдасгах боломжтой болно. Жишээлбэл, $GLOBALS руу бичихийг идэвхгүй болгох, $GLOBALS-ийг заагчаар дамжуулах боломжийг авч үзэж байна. 2000 багцад хийсэн дүн шинжилгээ нь зөвхөн 23 нь энэ өөрчлөлтөд нөлөөлнө гэдгийг харуулсан. Жишээлбэл, хэрэв санал батлагдсан бол 8.1 нь дараах илэрхийллийг дэмжихээ болино: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $ГЛОБАЛ; тохируулаагүй($GLOBALS); by_ref($ GLOBALS);
  • Дотоод аргууд нь одоо зөв төрлийг буцаах ёстой. PHP 8.1 дээр функцийн мэдэгдэлд тохирохгүй төрлийг буцаах нь анхааруулга өгөх боловч PHP 9.0 дээр анхааруулга нь алдаагаар солигдоно.
  • Нөөц ашиглахаас объектыг удирдахад чиг үүргийг шилжүүлэх ажлыг үргэлжлүүлэв. finfo_* болон imap_* функцуудыг объект руу шилжүүлсэн.
  • Хүчингүй гэж тэмдэглэгдсэн дотоод функцүүдэд хоосон утгыг аргумент болгон дамжуулахыг зогсоосон. PHP 8.1 дээр str_contains("string", null) гэх мэт бүтцийг ашиглах нь анхааруулга, PHP 9 дээр алдаа гаргахад хүргэдэг.
  • MurmurHash3 болон xxHash хэш алгоритмуудын дэмжлэгийг нэмсэн.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх