xref: /web-php/releases/8.0/ka.php (revision c093fb53)
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