1<?php 2$_SERVER['BASE_PAGE'] = 'releases/8.0/ka.php'; 3include_once __DIR__ . '/common.php'; 4 5releases\php80\common_header( 6 'PHP 8.0 — PHP ენის დიდი განახლება. ' . 7 'ის შეიცავს ბევრ ახალ შესაძლებლობას და ოპტიმიზაციებს, ' . 8 'მათ შორის დასახელებული არგუმენტები, union type, ატრიბუტები, ' . 9 'თვისებების გამარტივებული განსაზღვრა კონსტრუქტორში, გამოსახულება match, ' . 10 'ოპერატორი nullsafe, JIT და გაუმჯობესებები ტიპის სისტემაში, ' . 11 'შეცდომების დამუშავება და თანმიმდევრულობა.'); 12 13?> 14<section class="php8-section php8-section_dark php8-section_header center"> 15 <div class="page-tools"> 16 <div class="change-language"> 17 <?php releases\php80\language_chooser('ka'); ?> 18 </div> 19 </div> 20 <div class="php8-section__content"> 21 <div class="php8-logo"> 22 <img src="/images/php8/logo_php8.svg" alt="php8" height="126" width="343"> 23 </div> 24 <div class="php8-title">რელიზი!</div> 25 <div class="php8-subtitle"> 26 PHP 8.0 — PHP ენის დიდი განახლება.<br class="display-none-md"> ის შეიცავს ბევრ ახალ შესაძლებლობას და ოპტიმიზაციებს, 27 მათ შორის დასახელებული არგუმენტები, union type, ატრიბუტები, თვისებების გამარტივებული განსაზღვრა კონსტრუქტორში, გამოსახულება match, 28 ოპერატორი nullsafe, JIT და გაუმჯობესებები ტიპის სისტემაში, შეცდომების დამუშავება და თანმიმდევრულობა. 29 </div> 30 <div class="php8-button-wrapper center"> 31 <a class="php8-button php8-button_light" href="/downloads">გადადით PHP 8-ზე!</a> 32 </div> 33 </div> 34</section> 35 36<section class="php8-section center"> 37 <div class="php8-compare"> 38 <h2 class="php8-h2" id="named-arguments"> 39 დასახელებული არგუმენტები 40 <a class="php8-rfc" href="https://wiki.php.net/rfc/named_params">RFC</a> 41 </h2> 42 <div class="php8-compare__main"> 43 <div class="php8-compare__block example-contents"> 44 <div class="php8-compare__label">PHP 7</div> 45 <div class="php8-code phpcode"> 46 <?php highlight_php_trimmed( 47 'htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, \'UTF-8\', false);', 48 );?> 49 </div> 50 51 52 </div> 53 <div class="php8-compare__arrow"></div> 54 <div class="php8-compare__block example-contents"> 55 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 56 <div class="php8-code phpcode"> 57 <?php highlight_php_trimmed( 58 'htmlspecialchars($string, double_encode: false);', 59 );?> 60 </div> 61 </div> 62 </div> 63 <div class="php8-compare__content"> 64 <ul> 65 <li>მიუთითეთ მხოლოდ საჭირო პარამეტრები, გამოტოვეთ არასავალდებულო.</li> 66 <li>არგუმენტების თანმიმდევრობა არ არის მნიშვნელოვანი, არგუმენტები თვითდოკუმენტირებადია.</li> 67 </ul> 68 </div> 69 </div> 70 71 <div class="php8-compare"> 72 <h2 class="php8-h2" id="attributes"> 73 Attributes 74 <a class="php8-rfc" href="https://wiki.php.net/rfc/attributes_v2">RFC</a> <a class="php8-rfc" href="/manual/en/language.attributes.php">დოკუმენტაცია</a> 75 </h2> 76 <div class="php8-compare__main"> 77 <div class="php8-compare__block example-contents"> 78 <div class="php8-compare__label">PHP 7</div> 79 <div class="php8-code phpcode"> 80 <?php highlight_php_trimmed( 81 'class PostsController 82{ 83 /** 84 * @Route("/api/posts/{id}", methods={"GET"}) 85 */ 86 public function get($id) { /* ... */ } 87}', 88 );?> 89 </div> 90 </div> 91 <div class="php8-compare__arrow"></div> 92 <div class="php8-compare__block example-contents"> 93 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 94 <div class="php8-code phpcode"> 95 <?php highlight_php_trimmed( 96 'class PostsController 97{ 98 #[Route("/api/posts/{id}", methods: ["GET"])] 99 public function get($id) { /* ... */ } 100}', 101 );?> 102 </div> 103 </div> 104 </div> 105 <div class="php8-compare__content"> 106 <p>PHPDoc ანოტაციების ნაცვლად, შეგიძლიათ გამოიყენოთ სტრუქტურული მეტამონაცემები ნატიური PHP სინტაქსით.</p> 107 </div> 108 </div> 109 110 <div class="php8-compare"> 111 <h2 class="php8-h2" id="constructor-property-promotion"> 112 თვისებების განახლება კონსტრუქტორში 113 <a class="php8-rfc" href="https://wiki.php.net/rfc/constructor_promotion">RFC</a> <a class="php8-rfc" href="/manual/en/language.oop5.decon.php#language.oop5.decon.constructor.promotion">დოკუმენტაცია</a> 114 </h2> 115 <div class="php8-compare__main"> 116 <div class="php8-compare__block example-contents"> 117 <div class="php8-compare__label">PHP 7</div> 118 <div class="php8-code phpcode"> 119 <?php highlight_php_trimmed( 120 'class Point { 121 public float $x; 122 public float $y; 123 public float $z; 124 125 public function __construct( 126 float $x = 0.0, 127 float $y = 0.0, 128 float $z = 0.0 129 ) { 130 $this->x = $x; 131 $this->y = $y; 132 $this->z = $z; 133 } 134}', 135 );?> 136 </div> 137 </div> 138 <div class="php8-compare__arrow"></div> 139 <div class="php8-compare__block example-contents"> 140 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 141 <div class="php8-code phpcode"> 142 <?php highlight_php_trimmed( 143 'class Point { 144 public function __construct( 145 public float $x = 0.0, 146 public float $y = 0.0, 147 public float $z = 0.0, 148 ) {} 149}', 150 );?> 151 </div> 152 </div> 153 </div> 154 <div class="php8-compare__content"> 155 <p>ნაკლები შაბლონური კოდი თვისებების განსაზღვრისა და ინიციალიზაციისთვის.</p> 156 </div> 157 </div> 158 159 <div class="php8-compare"> 160 <h2 class="php8-h2" id="union-types"> 161 Union types 162 <a class="php8-rfc" href="https://wiki.php.net/rfc/union_types_v2">RFC</a> <a class="php8-rfc" href="/manual/en/language.types.declarations.php#language.types.declarations.composite.union">დოკუმენტაცია</a> 163 </h2> 164 <div class="php8-compare__main"> 165 <div class="php8-compare__block example-contents"> 166 <div class="php8-compare__label">PHP 7</div> 167 <div class="php8-code phpcode"> 168 <?php highlight_php_trimmed( 169 'class Number { 170 /** @var int|float */ 171 private $number; 172 173 /** 174 * @param float|int $number 175 */ 176 public function __construct($number) { 177 $this->number = $number; 178 } 179} 180 181new Number(\'NaN\'); // შეცდომები არაა', 182 );?> 183 </div> 184 </div> 185 <div class="php8-compare__arrow"></div> 186 <div class="php8-compare__block example-contents"> 187 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 188 <div class="php8-code phpcode"> 189 <?php highlight_php_trimmed( 190 'class Number { 191 public function __construct( 192 private int|float $number 193 ) {} 194} 195 196new Number(\'NaN\'); // TypeError', 197 );?> 198 </div> 199 </div> 200 </div> 201 <div class="php8-compare__content"> 202 <p>PHPDoc ანოტაციების ნაცვლად, გაერთიანებული ტიპებისთვის შეგიძლიათ გამოიყენოთ განცხადება union type, 203 რომლებიც მოწმდება შესრულების დროს.</p> 204 </div> 205 </div> 206 207 <div class="php8-compare"> 208 <h2 class="php8-h2" id="match-expression"> 209 გამოსახულება Match 210 <a class="php8-rfc" href="https://wiki.php.net/rfc/match_expression_v2">RFC</a> <a class="php8-rfc" href="/manual/en/control-structures.match.php">დოკუმენტაცია</a> 211 </h2> 212 <div class="php8-compare__main"> 213 <div class="php8-compare__block example-contents"> 214 <div class="php8-compare__label">PHP 7</div> 215 <div class="php8-code phpcode"> 216 <?php highlight_php_trimmed( 217 'switch (8.0) { 218 case \'8.0\': 219 $result = "ოოო არა!"; 220 break; 221 case 8.0: 222 $result = "ის, რასაც მე ველოდი"; 223 break; 224} 225echo $result; 226//> ოოო არა!', 227 );?> 228 </div> 229 </div> 230 <div class="php8-compare__arrow"></div> 231 <div class="php8-compare__block example-contents"> 232 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 233 <div class="php8-code phpcode"> 234 <?php highlight_php_trimmed( 235 'echo match (8.0) { 236 \'8.0\' => "Oh no!", 237 8.0 => "ის, რასაც მე ველოდი", 238}; 239//> ის, რასაც მე ველოდი', 240 );?> 241 </div> 242 </div> 243 </div> 244 <div class="php8-compare__content"> 245 <p>ახალი გამოსახულება match, switch ოპერატორის მსგავსია შემდეგი მახასიათებლებით:</p> 246 <ul> 247 <li>Match — ეს არის გამოსახულება, მისი შედეგი შეიძლება შენახული იყოს ცვლადში ან დაბრუნდეს.</li> 248 <li>პირობა match მხარს უჭერერს მხოლოდ ერთსტრიქონიან გამოსახულებებს, რომლებიც არ საჭიროებენ break; კონტროლის კონსტრუქციას.</li> 249 <li>გამოსახულება match იყენებს მკაცრ შედარებას.</li> 250 </ul> 251 </div> 252 </div> 253 254 <div class="php8-compare"> 255 <h2 class="php8-h2" id="nullsafe-operator"> 256 ოპერატორი Nullsafe 257 <a class="php8-rfc" href="https://wiki.php.net/rfc/nullsafe_operator">RFC</a> 258 </h2> 259 <div class="php8-compare__main"> 260 <div class="php8-compare__block example-contents"> 261 <div class="php8-compare__label">PHP 7</div> 262 <div class="php8-code phpcode"> 263 <?php highlight_php_trimmed( 264 '$country = null; 265 266if ($session !== null) { 267 $user = $session->user; 268 269 if ($user !== null) { 270 $address = $user->getAddress(); 271 272 if ($address !== null) { 273 $country = $address->country; 274 } 275 } 276}', 277 );?> 278 </div> 279 </div> 280 <div class="php8-compare__arrow"></div> 281 <div class="php8-compare__block example-contents"> 282 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 283 <div class="php8-code phpcode"> 284 <?php highlight_php_trimmed( 285 '$country = $session?->user?->getAddress()?->country;', 286 );?> 287 </div> 288 </div> 289 </div> 290 <div class="php8-compare__content"> 291 <p>null-ის შემოწმების ნაცვლად, შეგიძლიათ გამოიყენოთ გამოძახების თანმიმდევრობა ახალ Nullsafe ოპერატორით. 292 როდესაც ერთ-ერთი ელემენტი თანმიმდევრობაში აბრუნებს null-ს, შესრულება ჩერდება და მთელი თანმიმდევრობა აბრუნებს null-ს.</p> 293 </div> 294 </div> 295 296 <div class="php8-compare"> 297 <h2 class="php8-h2" id="saner-string-to-number-comparisons"> 298 სტრიქონებისა და რიცხვების გაუმჯობესებული შედარება 299 <a class="php8-rfc" href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a> 300 </h2> 301 <div class="php8-compare__main"> 302 <div class="php8-compare__block example-contents"> 303 <div class="php8-compare__label">PHP 7</div> 304 <div class="php8-code phpcode"> 305 <?php highlight_php_trimmed( 306 '0 == \'foobar\' // true', 307 );?> 308 </div> 309 </div> 310 <div class="php8-compare__arrow"></div> 311 <div class="php8-compare__block example-contents"> 312 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 313 <div class="php8-code phpcode"> 314 <?php highlight_php_trimmed( 315 '0 == \'foobar\' // false', 316 );?> 317 </div> 318 </div> 319 </div> 320 <div class="php8-compare__content"> 321 <p>PHP 8 რიცხვითი სტრიქონის შედარებისას იყენებს რიცხვების შედარებას. წინააღმდეგ შემთხვევაში, 322 რიცხვი გარდაიქმნება სტრიქონად და გამოიყენება სტრიქონების შედარება.</p> 323 </div> 324 </div> 325 326 <div class="php8-compare"> 327 <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions"> 328 ტიპების თანმიმდევრულობის შეცდომები ჩაშენებული ფუნქციებისთვის 329 <a class="php8-rfc" href="https://wiki.php.net/rfc/consistent_type_errors">RFC</a> 330 </h2> 331 <div class="php8-compare__main"> 332 <div class="php8-compare__block example-contents"> 333 <div class="php8-compare__label">PHP 7</div> 334 <div class="php8-code phpcode"> 335 <?php highlight_php_trimmed( 336 'strlen([]); // Warning: strlen() expects parameter 1 to be string, array given 337 338array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0', 339 );?> 340 </div> 341 </div> 342 <div class="php8-compare__arrow"></div> 343 <div class="php8-compare__block example-contents"> 344 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 345 <div class="php8-code phpcode"> 346 <?php highlight_php_trimmed( 347 'strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given 348 349array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0', 350 );?> 351 </div> 352 </div> 353 </div> 354 <div class="php8-compare__content"> 355 <p>შიდა ფუნქციების უმეტესობა უკვე გამორიცხავს Error გამონაკლისს, თუ შეცდომა მოხდა პარამეტრის შემოწმებისას.</p> 356 </div> 357 </div> 358</section> 359 360<section class="php8-section php8-section_light"> 361 <h2 class="php8-h2">კომპილაცია Just-In-Time</h2> 362 <p> 363 PHP 8 წარმოგიდგენთ JIT-კომპილაციის ორ მექანიზმს. JIT ტრასირება, მათგან ყველაზე პერსპექტიულია, 364 სინთეზურ ბენჩმარკზე აჩვენებს მუშაობის გაუმჯობესებას დაახლოებით 3-ჯერ და 1.5-2-ჯერ ზოგიერთ დიდ ხანს მომუშავე აპლიკაციებში. 365 აპლიკაციის სტანდარტული წარმადობა ერთ და იგივე დონეზეა PHP 7.4-თან. 366 </p> 367 <h3 class="php8-h3"> 368 JIT-ის შედარებითი წვლილი PHP 8-ის წარმადობაში 369 </h3> 370 <p> 371 <img src="/images/php8/scheme.svg" width="900" alt="Just-In-Time compilation"> 372 </p> 373 374 <div class="php8-columns"> 375 <div class="php8-column"> 376 <h2 class="php8-h2 php8-h2_margin-top">გაუმჯობესებები ტიპის სისტემაში და შეცდომების დამუშავება</h2> 377 <ul> 378 <li> 379 ტიპის უფრო მკაცრი შემოწმება არითმეტიკული/ბიტიური ოპერატორებისთვის 380 <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a> 381 </li> 382 <li> 383 აბსტრაქტული თვისებების მეთოდების შემოწმება <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a> 384 </li> 385 <li> 386 ჯადოსნური მეთოდების სწორი სიგნატურები <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a> 387 </li> 388 <li> 389 ძრავის გაფრთხილებების ხელახალი კლასიფიკაცია <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a> 390 </li> 391 <li> 392 ფატალური შეცდომა, როდესაც მეთოდის სიგნატურა შეუთავსებელია <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a> 393 </li> 394 <li> 395 @ ოპერატორი აღარ აჩუმებს ფატალურ შეცდომებს. 396 </li> 397 <li> 398 მემკვიდრეობა private მეთოდებთან <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a> 399 </li> 400 <li> 401 ახალი ტიპი mixed <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a> 402 </li> 403 <li> 404 დაბრუნების ტიპი static <a href="https://wiki.php.net/rfc/static_return_type">RFC</a> 405 </li> 406 <li> 407 ტიპები სტანდარტული ფუნქციებისთვის 408 <a href="https://externals.io/message/106522">Email თემა</a> 409 </li> 410 <li> 411 გაუმჭვირვალე ობიექტები რესურსების ნაცვლად 412 <a href="https://php.watch/versions/8.0/resource-CurlHandle">Curl</a>, 413 <a href="https://php.watch/versions/8.0/gdimage">Gd</a>, 414 <a href="https://php.watch/versions/8.0/sockets-sockets-addressinfo">Sockets</a>, 415 <a href="https://php.watch/versions/8.0/OpenSSL-resource">OpenSSL</a>, 416 <a href="https://php.watch/versions/8.0/xmlwriter-resource">XMLWriter</a>, and 417 <a href="https://php.watch/versions/8.0/xmlwriter-resource">XML</a> 418 გაფართოებებისთვის 419 </li> 420 </ul> 421 </div> 422 <div class="php8-column"> 423 <h2 class="php8-h2 php8-h2_margin-top">სინტაქსის სხვა გაუმჯობესება</h2> 424 <ul> 425 <li> 426 მძიმე დაშვებულია პარამეტრების სიის ბოლოს <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a> 427 და use დამოკლების სიაში <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a> 428 </li> 429 <li> 430 ბლოკი catch ცვლადის მითითების გარეშე <a href="https://wiki.php.net/rfc/non-capturing_catches">RFC</a> 431 </li> 432 <li> 433 ცვლადის სინტაქსის ცვლილება <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a> 434 </li> 435 <li> 436 სახელების სივრცეში სახელები განიხილება, როგორც ერთიამნი ტოკენი <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a> 437 </li> 438 <li> 439 გამოსახულება Throw <a href="https://wiki.php.net/rfc/throw_expression">RFC</a> 440 </li> 441 <li> 442 დამატება ::class ობიექტებისთვის <a href="https://wiki.php.net/rfc/class_name_literal_on_object">RFC</a> 443 </li> 444 </ul> 445 446 <h2 class="php8-h2 php8-h2_margin-top">ახალი კლასები, ინტერფეისები და ფუნქციები</h2> 447 <ul> 448 <li> 449 <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a> class 450 </li> 451 <li> 452 <a href="https://wiki.php.net/rfc/stringable">Stringable</a> interface 453 </li> 454 <li> 455 <a href="https://wiki.php.net/rfc/str_contains">str_contains()</a>, 456 <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_starts_with()</a>, 457 <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_ends_with()</a> 458 </li> 459 <li> 460 <a href="https://github.com/php/php-src/pull/4769">fdiv()</a> 461 </li> 462 <li> 463 <a href="https://wiki.php.net/rfc/get_debug_type">get_debug_type()</a> 464 </li> 465 <li> 466 <a href="https://github.com/php/php-src/pull/5427">get_resource_id()</a> 467 </li> 468 <li> 469 <a href="https://wiki.php.net/rfc/token_as_object">token_get_all()</a> ობიექტზე-ორიენტირებული ფუნქცია 470 </li> 471 <li> 472 <a href="https://wiki.php.net/rfc/dom_living_standard_api">ახალი API-ები DOM-ის გადასასვლელად და დასამუშავებლად</a> 473 </li> 474 </ul> 475 </div> 476 </div> 477</section> 478 479<section class="php8-section php8-section_dark php8-section_footer php8-footer"> 480 <div class="php8-section__content"> 481 <h2 class="php8-h2 center"> 482 უკეთესი წარმადობა, უკეთესი სინტაქსი, უფრო საიმედო ტიპების სისტემა. 483 </h2> 484 <div class="php8-button-wrapper center"> 485 <a class="php8-button php8-button_light" href="/downloads">გადადით PHP 8-ზე!</a> 486 </div> 487 <div class="php8-footer__content"> 488 <p> 489 PHP 8 წყაროს კოდის ჩამოსატვირთად ეწვიეთ <a href="http://www.php.net/downloads">ჩამოტვირთვის</a> გვერდს. 490 Windows-ის ბინარული ფაილები განთავსებულია საიტზე <a href="http://windows.php.net/download">PHP Windows-თვის</a>. 491 ცვლილებების სია წარმოდგენილია <a href="http://www.php.net/ChangeLog-8.php">ChangeLog-ში</a>. 492 </p> 493 <p> 494 <a href="/manual/en/migration80.php">მიგრაციის გზამკვლევი</a> ხელმისაწვდომია დოკუმენტაციის განყოფილებაში. გთხოვთ, 495 შეისწავლოთ იგი ახალი ფუნქციების დეტალური ჩამონათვალის მისაღებად და უკუ შეუთავსებელი ცვლილებებისთვის. 496 </p> 497 </div> 498 </div> 499</section> 500 501 502 503 504<?php site_footer(); 505