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

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

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

  • Ангийг зөвхөн унших боломжтой гэж тэмдэглэх боломжийг нэмсэн. Ийм ангиллын шинж чанаруудыг зөвхөн нэг удаа тохируулах боломжтой бөгөөд дараа нь тэдгээрийг өөрчлөх боломжгүй болно. Өмнө нь ангиллын шинж чанаруудыг зөвхөн унших боломжтой гэж тэмдэглэдэг байсан бол одоо та энэ горимыг бүх ангийн шинж чанаруудад нэг дор асааж болно. Ангийн түвшинд "зөвхөн уншигдах" тугийг зааж өгөх нь мөн ангилалд шинж чанаруудын динамик нэмэхийг блоклодог. зөвхөн унших анги Нийтлэл { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->үл мэдэгдэх = 'буруу'; // Алдаа: Динамик шинж чанарыг үүсгэх боломжгүй Post::$ үл мэдэгдэх
  • "үнэн", "худал" болон "null" гэсэн тусдаа төрлүүдийг нэмсэн бөгөөд эдгээр нь зөвхөн нэг хүчинтэй утгыг авах боломжтой бөгөөд жишээ нь алдаа дуусгах туг эсвэл хоосон утгатай функцийг буцаахад ашиглагддаг. Өмнө нь “true”, “false” болон “null” нь зөвхөн бусад төрлүүдтэй (жишээ нь “string|false”) хамт ашиглагдаж байсан бол одоо тусад нь ашиглагдах боломжтой: function alwaysFalse(): false { return false ; }
  • Алдаа гарах үед стекийн ул мөрийн гаралт дахь эмзэг тохиргоог шүүх боломжийг олгосон. Асуудлыг хянаж, хөгжүүлэгчдэд мэдээлдэг гуравдагч талын үйлчилгээнд гарсан алдааны талаарх мэдээллийг автоматаар илгээх үед тодорхой мэдээллийг хасах шаардлагатай байж болно. Жишээлбэл, та хэрэглэгчийн нэр, нууц үг, орчны хувьсагчийг агуулсан параметрүүдийг мөрөөс хасч болно. функцын тест( $foo, #[\SensitiveParameter] $нууц үг, $baz ) { throw new Exception('Алдаа'); } тест('foo', 'нууц үг', 'baz'); Гайхалтай алдаа: Баригдаагүй онцгой тохиолдол: test.php-д алдаа: 8 Стекийн мөр: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} test.php-д хаягдсан. онлайн 8
  • Шинж чанар дахь тогтмолуудыг тодорхойлохыг зөвшөөрдөг (шинж чанар, кодыг дахин ашиглах механизм). Шинж чанарт тодорхойлсон тогтмолуудад тухайн шинж чанарыг ашигладаг ангиар дамжуулан хандах боломжтой (гэхдээ шинж чанарын нэрээр биш). trait Foo { public const CONSTANT = 1; нийтийн функц bar(): int { өөрийгөө буцаана::CONSTANT; // Үхлийн алдаа } } анги Bar { Foo ашиглах; } var_dump(Bar::CONSTANT); // 1
  • Төрөлүүдийн нэгдэл (хоёр ба түүнээс дээш төрлийн цуглуулга) ба төрлүүдийн огтлолцол (утга нь хэд хэдэн тоонд багтах төрөл) -ийг нэгтгэх боломжийг олгодог салгах хэвийн хэлбэрээр (DNF, Disjunctive Normal Form) төрлүүдийг тодорхойлох чадварыг нэмсэн. төрлүүд нэгэн зэрэг). class Foo { нийтийн функцийн мөр((A&B)|null $entity) { if ($entity === null) { null буцаана; } $entity буцаана; } }
  • Хуурамч санамсаргүй тоо, дарааллыг бий болгох функц, анги бүхий "Random" шинэ өргөтгөлийг санал болгов. Модуль нь объект хандалтат интерфейсээр хангадаг, псевдо санамсаргүй тоо үүсгэх янз бүрийн хөдөлгүүрүүдийг сонгох боломжийг олгодог, үүнд криптографид ашиглахад тохиромжтой, туслах функцууд, жишээлбэл, массив болон мөрүүдийг санамсаргүй холих, санамсаргүй массив товчлууруудыг сонгох, өөрийн бие даасан мужтай хэд хэдэн генераторыг нэгэн зэрэг ашиглах. $rng = $is_production? шинэ Random\Engine\Secure() : шинэ Random\Engine\Mt19937(1234); $randomizer = шинэ Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Хэлэлцээрээс хамааралгүй тохиолдол хөрвүүлэлтийг хэрэгжүүлсэн. strtolower() болон strtoupper() зэрэг функцууд нь одоо локал тохиргоог "C" болгож байгаа шиг ASCII муж дахь тэмдэгтүүдийн том томруулдаг.
  • Шинэ функцүүд нэмэгдсэн: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Шинэ аргууд нэмэгдсэн: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Ангид шинж чанаруудыг динамикаар үүсгэх чадвар хуучирсан. PHP 9.0-д анх ангид тодорхойлогдоогүй шинж чанаруудад хандахад алдаа гарах болно (ErrorException). Properties үүсгэх __get болон __set аргуудаар хангадаг ангиуд эсвэл stdClass дахь динамик шинж чанарууд нь өөрчлөгдөөгүй хэвээр ажиллах бөгөөд хөгжүүлэгчийг далд алдаанаас хамгаалахын тулд зөвхөн байхгүй шинж чанаруудтай далд ажлыг дэмжинэ. Хуучин кодын ажлыг хадгалахын тулд "#[AllowDynamicProperties]" шинж чанарыг санал болгож, динамик шинж чанаруудыг ашиглахыг зөвшөөрдөг.
  • "${var}" болон ${(var)}" илэрхийлэлүүдийг ашиглан хувьсагчийн утгуудыг мөр болгон орлуулах боломж хуучирсан. Түгээмэл хэрэглэгддэг "{$var}" болон "$var" орлуулалтын дэмжлэгийг хадгалсан. Жишээ нь: "Сайн уу {$world}"; OK "Сайн уу $world"; OK "Сайн уу ${world}"; Хуучирсан: ${}-г мөрт ашиглахыг зогсоосон
  • "call_user_func($callable)"-ээр дуудаж болох хэсэгчлэн дэмжигдсэн дуудлагууд нь хуучирсан боловч "$callable()": "self::method" "parent::method" "static ::" хэлбэрээр дуудахыг дэмждэггүй. арга" ["өөрөө", "арга"] ["эцэг эх", "арга"] ["статик", "арга"] ["Foo", "Bar::method"] [шинэ Foo, "Bar: :method" "]
  • Тохиргоонд error_log_mode зааврыг нэмсэн бөгөөд энэ нь алдааны бүртгэлд хандах горимыг тодорхойлох боломжийг танд олгоно.

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

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