1<?php 2$_SERVER['BASE_PAGE'] = 'releases/8.0/tr.php'; 3include_once __DIR__ . '/common.php'; 4 5releases\php80\common_header( 6 'PHP 8.0, PHP dili için önemli bir güncellemedir. Optimizasyonlar ve yeni özellikler: Adlandırılmış ' . 7 'Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe Operatorü, ' . 8 'JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir.'); 9 10?> 11<section class="php8-section php8-section_dark php8-section_header center"> 12 <div class="page-tools"> 13 <div class="change-language"> 14 <?php releases\php80\language_chooser('tr'); ?> 15 </div> 16 </div> 17 <div class="php8-section__content"> 18 <div class="php8-logo"> 19 <img src="/images/php8/logo_php8.svg" alt="php8" height="126" width="343"> 20 </div> 21 <div class="php8-title">Yayında!</div> 22 <div class="php8-subtitle"> 23 PHP 8.0, PHP dili için önemli bir güncellemedir.<br class="display-none-md"> Optimizasyonlar ve yeni özellikler: 24 Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe 25 Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir. 26 </div> 27 <div class="php8-button-wrapper center"> 28 <a class="php8-button php8-button_light" href="/downloads">PHP 8'e geçiş yapın!</a> 29 </div> 30 </div> 31</section> 32 33<section class="php8-section center"> 34 <div class="php8-compare"> 35 <h2 class="php8-h2" id="named-arguments"> 36 Adlandırılmış Değişkenler 37 <a class="php8-rfc" href="https://wiki.php.net/rfc/named_params">RFC</a> 38 </h2> 39 <div class="php8-compare__main"> 40 <div class="php8-compare__block example-contents"> 41 <div class="php8-compare__label">PHP 7</div> 42 <div class="php8-code phpcode"> 43 <?php highlight_php_trimmed( 44 'htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, \'UTF-8\', false);', 45 );?> 46 </div> 47 48 49 </div> 50 <div class="php8-compare__arrow"></div> 51 <div class="php8-compare__block example-contents"> 52 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 53 <div class="php8-code phpcode"> 54 <?php highlight_php_trimmed( 55 'htmlspecialchars($string, double_encode: false);', 56 );?> 57 </div> 58 </div> 59 </div> 60 <div class="php8-compare__content"> 61 <ul> 62 <li>Opsiyonel parametreleri atlayabiliyor ve yalnızca zorunlu olanları belirtebiliyorsunuz.</li> 63 <li>Parametrelerin sırası önemli değil ve kendi kendilerini dokümante ediyorlar.</li> 64 </ul> 65 </div> 66 </div> 67 68 <div class="php8-compare"> 69 <h2 class="php8-h2" id="attributes"> 70 Attributes 71 <a class="php8-rfc" href="https://wiki.php.net/rfc/attributes_v2">RFC</a> <a class="php8-rfc" href="/manual/tr/language.attributes.php">Doc</a> 72 </h2> 73 <div class="php8-compare__main"> 74 <div class="php8-compare__block example-contents"> 75 <div class="php8-compare__label">PHP 7</div> 76 <div class="php8-code phpcode"> 77 <?php highlight_php_trimmed( 78 'class PostsController 79{ 80 /** 81 * @Route("/api/posts/{id}", methods={"GET"}) 82 */ 83 public function get($id) { /* ... */ } 84}', 85 );?> 86 </div> 87 </div> 88 <div class="php8-compare__arrow"></div> 89 <div class="php8-compare__block example-contents"> 90 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 91 <div class="php8-code phpcode"> 92 <?php highlight_php_trimmed( 93 'class PostsController 94{ 95 #[Route("/api/posts/{id}", methods: ["GET"])] 96 public function get($id) { /* ... */ } 97}', 98 );?> 99 </div> 100 </div> 101 </div> 102 <div class="php8-compare__content"> 103 <p>PHPDoc yorum satırları yerine PHP sözdizimi ile yapılandırılmış metadata kullanılabiliyor.</p> 104 </div> 105 </div> 106 107 <div class="php8-compare"> 108 <h2 class="php8-h2" id="constructor-property-promotion"> 109 Kurucularda Özellik Tanımı 110 <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">Doc</a> 111 </h2> 112 <div class="php8-compare__main"> 113 <div class="php8-compare__block example-contents"> 114 <div class="php8-compare__label">PHP 7</div> 115 <div class="php8-code phpcode"> 116 <?php highlight_php_trimmed( 117 'class Point { 118 public float $x; 119 public float $y; 120 public float $z; 121 122 public function __construct( 123 float $x = 0.0, 124 float $y = 0.0, 125 float $z = 0.0 126 ) { 127 $this->x = $x; 128 $this->y = $y; 129 $this->z = $z; 130 } 131}', 132 );?> 133 </div> 134 </div> 135 <div class="php8-compare__arrow"></div> 136 <div class="php8-compare__block example-contents"> 137 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 138 <div class="php8-code phpcode"> 139 <?php highlight_php_trimmed( 140 'class Point { 141 public function __construct( 142 public float $x = 0.0, 143 public float $y = 0.0, 144 public float $z = 0.0, 145 ) {} 146}', 147 );?> 148 </div> 149 </div> 150 </div> 151 <div class="php8-compare__content"> 152 <p>Sınıfların özelliklerini tanımlamak için daha az kodlama yapılabiliyor.</p> 153 </div> 154 </div> 155 156 <div class="php8-compare"> 157 <h2 class="php8-h2" id="union-types"> 158 Union types 159 <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">Doc</a> 160 </h2> 161 <div class="php8-compare__main"> 162 <div class="php8-compare__block example-contents"> 163 <div class="php8-compare__label">PHP 7</div> 164 <div class="php8-code phpcode"> 165 <?php highlight_php_trimmed( 166 'class Number { 167 /** @var int|float */ 168 private $number; 169 170 /** 171 * @param float|int $number 172 */ 173 public function __construct($number) { 174 $this->number = $number; 175 } 176} 177 178new Number(\'NaN\'); // Ok', 179 );?> 180 </div> 181 </div> 182 <div class="php8-compare__arrow"></div> 183 <div class="php8-compare__block example-contents"> 184 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 185 <div class="php8-code phpcode"> 186 <?php highlight_php_trimmed( 187 'class Number { 188 public function __construct( 189 private int|float $number 190 ) {} 191} 192 193new Number(\'NaN\'); // TypeError', 194 );?> 195 </div> 196 </div> 197 </div> 198 <div class="php8-compare__content"> 199 <p>Değişken türlerinin kombinasyonu için PHPDoc açıklamaları yerine çalışma zamanında doğrulanan 200 birleşim türleri (union types) tanımlamaları kullanılabiliyor.</p> 201 </div> 202 </div> 203 204 <div class="php8-compare"> 205 <h2 class="php8-h2" id="match-expression"> 206 Match İfadesi 207 <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">Doc</a> 208 </h2> 209 <div class="php8-compare__main"> 210 <div class="php8-compare__block example-contents"> 211 <div class="php8-compare__label">PHP 7</div> 212 <div class="php8-code phpcode"> 213 <?php highlight_php_trimmed( 214 'switch (8.0) { 215 case \'8.0\': 216 $result = "Oh no!"; 217 break; 218 case 8.0: 219 $result = "This is what I expected"; 220 break; 221} 222echo $result; 223//> Oh no!', 224 );?> 225 </div> 226 </div> 227 <div class="php8-compare__arrow"></div> 228 <div class="php8-compare__block example-contents"> 229 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 230 <div class="php8-code phpcode"> 231 <?php highlight_php_trimmed( 232 'echo match (8.0) { 233 \'8.0\' => "Oh no!", 234 8.0 => "This is what I expected", 235}; 236//> This is what I expected', 237 );?> 238 </div> 239 </div> 240 </div> 241 <div class="php8-compare__content"> 242 <p>Yeni match ifadesi switch'e çok benzer ve aşağıdaki özelliklere sahiptir:</p> 243 <ul> 244 <li>Match bir ifadedir, sonucu bir değişkende saklanabilir veya döndürülebilir.</li> 245 <li>Match'in karşılıkları tek satır ifadeleri destekler ve break; kullanılması gerekmez.</li> 246 <li>Match katı (strict) tip karşılaştırma yapar.</li> 247 </ul> 248 </div> 249 </div> 250 251 <div class="php8-compare"> 252 <h2 class="php8-h2" id="nullsafe-operator"> 253 Nullsafe Operatorü 254 <a class="php8-rfc" href="https://wiki.php.net/rfc/nullsafe_operator">RFC</a> 255 </h2> 256 <div class="php8-compare__main"> 257 <div class="php8-compare__block example-contents"> 258 <div class="php8-compare__label">PHP 7</div> 259 <div class="php8-code phpcode"> 260 <?php highlight_php_trimmed( 261 '$country = null; 262 263if ($session !== null) { 264 $user = $session->user; 265 266 if ($user !== null) { 267 $address = $user->getAddress(); 268 269 if ($address !== null) { 270 $country = $address->country; 271 } 272 } 273}', 274 );?> 275 </div> 276 </div> 277 <div class="php8-compare__arrow"></div> 278 <div class="php8-compare__block example-contents"> 279 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 280 <div class="php8-code phpcode"> 281 <?php highlight_php_trimmed( 282 '$country = $session?->user?->getAddress()?->country;', 283 );?> 284 </div> 285 </div> 286 </div> 287 <div class="php8-compare__content"> 288 <p>Null koşulları için kontroller yazmak yerine yeni Nullsafe operatörüyle çağrı zinciri 289 oluşturabilirsiniz. Oluşturduğunuz zincirdeki herhangi bir parça hatalı 290 değerlendirilirse tüm zincirin işlevi durur ve null olarak değerlendirilir.</p> 291 </div> 292 </div> 293 294 <div class="php8-compare"> 295 <h2 class="php8-h2" id="saner-string-to-number-comparisons"> 296 Daha Akıllı String ve Sayı Karşılaştırmaları 297 <a class="php8-rfc" href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a> 298 </h2> 299 <div class="php8-compare__main"> 300 <div class="php8-compare__block example-contents"> 301 <div class="php8-compare__label">PHP 7</div> 302 <div class="php8-code phpcode"> 303 <?php highlight_php_trimmed( 304 '0 == \'foobar\' // true', 305 );?> 306 </div> 307 </div> 308 <div class="php8-compare__arrow"></div> 309 <div class="php8-compare__block example-contents"> 310 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 311 <div class="php8-code phpcode"> 312 <?php highlight_php_trimmed( 313 '0 == \'foobar\' // false', 314 );?> 315 </div> 316 </div> 317 </div> 318 <div class="php8-compare__content"> 319 <p>Sayısal string karşılaştırılırken PHP 8 sayısal olarak karşılaştırır. Aksi halde sayı bir 320 string'e çevrilir ve string olarak karşılaştırılır.</p> 321 </div> 322 </div> 323 324 <div class="php8-compare"> 325 <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions"> 326 Dahili İşlevler için Tutarlı Hata Türleri 327 <a class="php8-rfc" href="https://wiki.php.net/rfc/consistent_type_errors">RFC</a> 328 </h2> 329 <div class="php8-compare__main"> 330 <div class="php8-compare__block example-contents"> 331 <div class="php8-compare__label">PHP 7</div> 332 <div class="php8-code phpcode"> 333 <?php highlight_php_trimmed( 334 'strlen([]); // Warning: strlen() expects parameter 1 to be string, array given 335 336array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0', 337 );?> 338 </div> 339 </div> 340 <div class="php8-compare__arrow"></div> 341 <div class="php8-compare__block example-contents"> 342 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 343 <div class="php8-code phpcode"> 344 <?php highlight_php_trimmed( 345 'strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given 346 347array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0', 348 );?> 349 </div> 350 </div> 351 </div> 352 <div class="php8-compare__content"> 353 <p>Artık dahili işlevlere gönderilen parametreler doğrulanamazsa Error exception fırlatıyorlar.</p> 354 </div> 355 </div> 356</section> 357 358<section class="php8-section php8-section_light"> 359 <h2 class="php8-h2">Just-In-Time Derlemesi (JIT)</h2> 360 <p> 361 PHP 8, iki JIT derleme motoru sunuyor. Tracing JIT, ikisi arasında en yetenekli olanı. Karşılaştırmalarda 362 yaklaşık 3 kat daha iyi performans ve uzun süre işlem yapan bazı uygulamalarda 1,5–2 kat iyileşme gösteriyor. 363 Normal uygulamalarda performansı PHP 7.4 ile aynı. 364 </p> 365 <h3 class="php8-h3"> 366 PHP 8 performasına JIT katkısının karşılaştırması 367 </h3> 368 <p> 369 <img src="/images/php8/scheme.svg" width="900" alt="Just-In-Time compilation"> 370 </p> 371 372 <div class="php8-columns"> 373 <div class="php8-column"> 374 <h2 class="php8-h2 php8-h2_margin-top">Tip sistemi ve hata işlemede iyileştirmeler</h2> 375 <ul> 376 <li> 377 Aritmetik/bitsel operatörler için daha katı tip denetimi 378 <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a> 379 </li> 380 <li> 381 Soyut özellikli metodlar için doğrulama <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a> 382 </li> 383 <li> 384 Sihirli metodlar için doğru işaretlemeler <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a> 385 </li> 386 <li> 387 Yeniden sınıflandırılan motor hataları <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a> 388 </li> 389 <li> 390 Uyumsuz metod işaretleri için fatal error <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a> 391 </li> 392 <li> 393 @ operatörü artık önemli hataları susturmuyor 394 </li> 395 <li> 396 Private methodlarda kalıtımlar <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a> 397 </li> 398 <li> 399 Mixed tipi <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a> 400 </li> 401 <li> 402 Static return tipi <a href="https://wiki.php.net/rfc/static_return_type">RFC</a> 403 </li> 404 <li> 405 Dahili işlevler için tip açıklamaları 406 <a href="https://externals.io/message/106522">E-posta konusu</a> 407 </li> 408 <li> 409 Eklentiler için özkaynak türleri(resources) yerine opak nesneler: 410 <a href="https://php.watch/versions/8.0/resource-CurlHandle">Curl</a>, 411 <a href="https://php.watch/versions/8.0/gdimage">Gd</a>, 412 <a href="https://php.watch/versions/8.0/sockets-sockets-addressinfo">Sockets</a>, 413 <a href="https://php.watch/versions/8.0/OpenSSL-resource">OpenSSL</a>, 414 <a href="https://php.watch/versions/8.0/xmlwriter-resource">XMLWriter</a> ve 415 <a href="https://php.watch/versions/8.0/xmlwriter-resource">XML</a>. 416 </li> 417 </ul> 418 </div> 419 <div class="php8-column"> 420 <h2 class="php8-h2 php8-h2_margin-top">Diğer PHP sözdizimi düzenlemeleri ve iyileştirmeleri</h2> 421 <ul> 422 <li> 423 Parametre ve closure listelerinin sonunda virgül kullanılabilmesi <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a> 424 <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a> 425 </li> 426 <li> 427 Değişken atamasına gerek olmayan hataların yakalanabilmesi <a href="https://wiki.php.net/rfc/non-capturing_catches">RFC</a> 428 </li> 429 <li> 430 Değişken sözdizimlerinde iyileştirmeler <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a> 431 </li> 432 <li> 433 İsim alanındaki tanımları tek bir belirteç olarak değerlendirme <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a> 434 </li> 435 <li> 436 Throw deyimi artık bir ifade (expression) <a href="https://wiki.php.net/rfc/throw_expression">RFC</a> 437 </li> 438 <li> 439 Nesnelerde ::class kullanılabilmesi <a href="https://wiki.php.net/rfc/class_name_literal_on_object">RFC</a> 440 </li> 441 </ul> 442 443 <h2 class="php8-h2 php8-h2_margin-top">Yeni Sınıflar, Arayüzler ve Fonksiyonlar</h2> 444 <ul> 445 <li> 446 <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a> sınıfı 447 </li> 448 <li> 449 <a href="https://wiki.php.net/rfc/stringable">Stringable</a> arayüzü 450 </li> 451 <li> 452 <a href="https://wiki.php.net/rfc/str_contains">str_contains()</a>, 453 <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_starts_with()</a>, 454 <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_ends_with()</a> fonksiyonları 455 </li> 456 <li> 457 <a href="https://github.com/php/php-src/pull/4769">fdiv()</a> 458 </li> 459 <li> 460 <a href="https://wiki.php.net/rfc/get_debug_type">get_debug_type()</a> 461 </li> 462 <li> 463 <a href="https://github.com/php/php-src/pull/5427">get_resource_id()</a> 464 </li> 465 <li> 466 <a href="https://wiki.php.net/rfc/token_as_object">token_get_all()</a> nesne implementasyonu 467 </li> 468 <li> 469 <a href="https://wiki.php.net/rfc/dom_living_standard_api">New DOM Traversal and Manipulation APIs</a> 470 </li> 471 </ul> 472 </div> 473 </div> 474</section> 475 476<section class="php8-section php8-section_dark php8-section_footer php8-footer"> 477 <div class="php8-section__content"> 478 <h2 class="php8-h2 center"> 479 Daha iyi performans, daha iyi sözdizimi, geliştirilmiş tip desteği. 480 </h2> 481 <div class="php8-button-wrapper center"> 482 <a class="php8-button php8-button_light" href="/downloads">PHP 8'e geçiş yapın!</a> 483 </div> 484 <div class="php8-footer__content"> 485 <p> 486 PHP 8'i indirmek için <a href="http://www.php.net/downloads">downloads</a> sayfasını ziyaret edebilirsiniz. 487 Windows için derlenmiş sürümüne <a href="http://windows.php.net/download">PHP for Windows</a> sayfasından ulaşabilirsiniz. 488 Değişiklikler için <a href="http://www.php.net/ChangeLog-8.php">ChangeLog</a>'a göz atabilirsiniz. 489 </p> 490 <p> 491 PHP Kılavuzundan PHP 8 için <a href="/manual/tr/migration80.php">Göç Belgelerine</a> ulaşabilirsiniz. 492 Yeni özellikler ve geriye dönük uyumluluğu etkileyecek değişikliklerin ayrıntılı listesi için göç belgesini inceleyiniz. 493 </p> 494 </div> 495 </div> 496</section> 497 498 499 500 501<?php site_footer(); 502