{"id":30999,"date":"2021-01-22T16:55:45","date_gmt":"2021-01-22T13:55:45","guid":{"rendered":"https:\/\/www.natro.com\/blog\/?p=30999"},"modified":"2021-01-22T16:55:49","modified_gmt":"2021-01-22T13:55:49","slug":"php-8-yenilikleri-ozellikler-iyilestirmeler-ve-guncellemeler","status":"publish","type":"post","link":"https:\/\/www.natro.com\/blog\/php-8-yenilikleri-ozellikler-iyilestirmeler-ve-guncellemeler\/","title":{"rendered":"PHP 8 Yenilikleri, \u00d6zellikler, \u0130yile\u015ftirmeler ve G\u00fcncellemeler"},"content":{"rendered":"\n<p><strong>PHP 8<\/strong> g\u00fcncellemesi ile yeni adland\u0131rmalar yap\u0131lm\u0131\u015f arg\u00fcmanlar\u0131n, birle\u015ftirme t\u00fcrlerinin, yap\u0131c\u0131 \u00f6zellik tan\u0131t\u0131mlar\u0131n\u0131n, \u00f6zniteliklerin, e\u015fle\u015fme ifadelerinin JIT sistemindeki iyile\u015ftirmelerin, hata i\u015fleme ve tutarl\u0131l\u0131k \u00f6zelliklerine ve optimizasyonuna sahip olabilirsiniz.<\/p>\n\n\n\n<p>PHP 8 versiyonu, 26 Kas\u0131m 2020 tarihinde resmi olarak kullan\u0131c\u0131n\u0131n hizmetine sunuldu. B\u00fcy\u00fck bir yenilikle kullan\u0131ma sunulan s\u00f6z konusu versiyon, bir\u00e7ok g\u00fc\u00e7l\u00fc \u00f6zelli\u011fi de beraberinde getiriyor. Bu yeni \u00f6zellikler sayesinde \u00e7ok daha kolay bir \u015fekilde kod yazabilirsiniz. Ayr\u0131ca daha kullan\u0131\u015fl\u0131 ve g\u00fc\u00e7l\u00fc uygulamalar olu\u015fturabilirsiniz. PHP 8\u2019in kullan\u0131c\u0131lar taraf\u0131ndan en be\u011fenilen \u00f6zelli\u011fi <strong>Just in Time<\/strong> kavram\u0131n\u0131n k\u0131saltmas\u0131 olan <strong>JIT<\/strong> derleyicisidir. Peki, JIT kavram\u0131 ne demektir?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-jit-nedir\"><span id=\"jit-nedir\">JIT Nedir?<\/span><\/h2>\n\n\n\n<p>JIT, OPcache\u2019in neredeyse ba\u011f\u0131ms\u0131z bir par\u00e7as\u0131 olarak uygulanan bir i\u015flev mekanizmas\u0131d\u0131r. Bu \u00f6zellik ile PHP derlemeleri etkinle\u015ftirilip devre d\u0131\u015f\u0131 b\u0131rak\u0131labilir. Derlemeler etkinle\u015ftirildi\u011finde dosyalar\u0131n yerel kodu OPcache belle\u011finde saklan\u0131r. <\/p>\n\n\n\n<p><strong>Peki, JIT ile OPcache aras\u0131ndaki farklar nelerdir?<\/strong><\/p>\n\n\n\n<p>PHP i\u00e7in JIT\u2019in ifade etti\u011fi anlam\u0131 do\u011fru analiz etmek i\u00e7in \u00f6ncelikle PHP\u2019nin kaynak kodunda sistemin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na bir g\u00f6z atmak gerekir. PHP, 4 a\u015famal\u0131 y\u00fcr\u00fcyen bir s\u00fcre\u00e7tir. A\u015fa\u011f\u0131da bu a\u015famalar\u0131n neler oldu\u011funu g\u00f6rebilirsiniz.<\/p>\n\n\n\n<p><strong>Lexing\/Tokenizing: <\/strong>PHP\u2019nin ilk a\u015famas\u0131 olan lexing s\u00fcrecinde PHP kodu okunur. Bu kapsamda bir dizi belirte\u00e7ler olu\u015fturulur.<\/p>\n\n\n\n<p><strong>Ayr\u0131\u015ft\u0131rma<\/strong>: PHP\u2019nin bu a\u015famas\u0131nda komut dosyalar\u0131n\u0131n s\u00f6zdizimleri ile e\u015fle\u015fip e\u015fle\u015fmedi\u011fi kontrol edilir. Bu a\u015famada soyut bir s\u00f6zdizimi a\u011fac\u0131 olan AST i\u00e7in \u00e7e\u015fitli belirte\u00e7ler kullan\u0131l\u0131r.<\/p>\n\n\n\n<p><strong>Derleme<\/strong>:\u00a0Bu a\u015famada yorumlay\u0131c\u0131dan ge\u00e7en AST d\u00fc\u011f\u00fcmleri, Zend VM taraf\u0131ndan ge\u00e7irilerek komut t\u00fcr\u00fc belirlenir. Say\u0131sal tan\u0131mlay\u0131c\u0131lar d\u00fc\u015f\u00fck seviyedeki Zend Opcodes\u2019e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/p>\n\n\n\n<p><strong>Yorumlama<\/strong>: Opcodes yorumlanarak, Zend VM \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-opcache-in-php-h-z-na-etkisi\"><span id=\"opcachein-php-hizina-etkisi\">OPcache\u2019in PHP H\u0131z\u0131na Etkisi<\/span><\/h2>\n\n\n\n<p>PHP, yorumlanm\u0131\u015f bir dil demektir. Bir PHP \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda yorumlay\u0131c\u0131, kodu tekrar tekrar \u00e7al\u0131\u015ft\u0131r\u0131r. Bu durum, CPU kaynaklar\u0131n\u0131n etkin kullan\u0131lmamas\u0131na neden oldu\u011fu gibi zaman\u0131n da etkin kullan\u0131lmamas\u0131 demektir.<\/p>\n\n\n\n<p>OPcache, \u00f6nceden derlenmi\u015f komut dosyas\u0131n\u0131n bayt kodunu bellekte depolar. Bu sayede PHP\u2019nin performans\u0131n\u0131 art\u0131r\u0131r. B\u00f6ylece PHP\u2019nin her istekten sonra komut dosyalar\u0131n\u0131 y\u00fckleme ve ayr\u0131\u015ft\u0131rma ihtiyac\u0131n\u0131n ortadan kalkmas\u0131 sa\u011flan\u0131r.<\/p>\n\n\n\n<p>OPcache etkin haldeyken PHP yorumlay\u0131c\u0131s\u0131 yukar\u0131da da belirtilmi\u015f olan 4 a\u015famal\u0131 i\u015flemden ge\u00e7er. Fakat komut dosyalar\u0131 ilk defa \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Zend VM\u2019de ise derhal \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-named-arguments\"><span id=\"named-arguments\">Named Arguments<\/span><\/h2>\n\n\n\n<p>\u201cNamed Arguments\u201d teriminin T\u00fcrk\u00e7e kar\u015f\u0131l\u0131\u011f\u0131, \u201cAdland\u0131r\u0131lm\u0131\u015f De\u011fi\u015fkenler\u201d olarak ifade edilir. Phyton programlama dilinde kullan\u0131lan adland\u0131r\u0131lm\u0131\u015f de\u011fi\u015fkenler, PHP 8 versiyonu ile \u00e7ok rahat bir \u015fekilde kullan\u0131labilir. Yeni versiyonun sa\u011flad\u0131\u011f\u0131 \u00e7ok \u00f6nemli avantajlardan biri named arguments kullan\u0131m\u0131n\u0131n etkin olarak ger\u00e7ekle\u015ftirilmesidir. Named Arguents \u00f6zelli\u011fi ile parametrelerin fonksiyonlara belirli bir s\u0131ra ile g\u00f6nderilme zorunlulu\u011fu ortadan kalkar. Bu sayede kodun okunurlu\u011fu artarak geli\u015ftiricinin i\u015fi de kolayla\u015f\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-attributes\"><span id=\"attributes\">Attributes<\/span><\/h2>\n\n\n\n<p>T\u00fcrk\u00e7e kar\u015f\u0131l\u0131\u011f\u0131 \u201c\u00f6zellikler\u201d olan attributes ile eski tip doc bloklar\u0131n\u0131 birbirinden ayr\u0131lma zorunlulu\u011fu ortadan kalkar. Bu sayede sistem meta verilerinin eklenmesine izin verir.<\/p>\n\n\n\n<p>PHP\u2019nin eski versiyonlar\u0131nda sadece string kanal\u0131ndaki yorum bloklar\u0131na izin verilir. PHP 8 versiyonundaki attributes \u00f6zelli\u011fi ile di\u011fer kanallar\u0131n yorumlar\u0131 da kullan\u0131labilir.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-kurucularda-zellik-tan-mlar\"><span id=\"kurucularda-ozellik-tanimlari\">Kurucularda \u00d6zellik Tan\u0131mlar\u0131<\/span><\/h2>\n\n\n\n<p>Ba\u015fl\u0131ktaki \u00f6zellik ile sistem \u00fczerinde daha anla\u015f\u0131l\u0131r kodlar\u0131n kullan\u0131lmas\u0131na imk\u00e2n tan\u0131n\u0131r. PHP 8 i\u00e7erisinde olu\u015fturulan s\u0131n\u0131flar\u0131n \u00f6zelliklerini do\u011frudan ba\u015flang\u0131\u00e7 de\u011ferine atayabilirsiniz.<\/p>\n\n\n\n<p>\u00d6nceki versiyonlarda \u00f6zellik tan\u0131mlamalar\u0131 class\u2019\u0131n ilk a\u015famas\u0131nda yap\u0131l\u0131rd\u0131. Bu a\u015famada ba\u015flang\u0131\u00e7 de\u011feri atamas\u0131 yap\u0131lacaksa yine kurucu i\u00e7erisinde yap\u0131lmas\u0131 gerekirdi. PHP 8\u2019de ise eski kodlar\u0131n\u0131z\u0131 hi\u00e7 de\u011fi\u015ftirmeden b\u0131rakabilirsiniz. Yeni kodlar\u0131n\u0131z ile sistemi kullanmaya devam edebilirsiniz.\u00a0\u00a0\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-birle-ik-de-i-ken-tiplerinin-eklenmesi\"><span id=\"birlesik-degisken-tiplerinin-eklenmesi\">Birle\u015fik De\u011fi\u015fken Tiplerinin Eklenmesi<\/span><\/h2>\n\n\n\n<p>Birle\u015fik de\u011fi\u015fken tiplerinin eklenmesi de i\u015fleri \u00e7ok kolayla\u015ft\u0131ran bir \u00f6zelliktir. Birden fazla tipe sahip olan de\u011fi\u015fkenler do\u011fal birle\u015fik de\u011fi\u015fkenlerle yap\u0131labilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-match-i-fadesinin-kullan-m\"><span id=\"match-ifadesinin-kullanimi\">Match \u0130fadesinin Kullan\u0131m\u0131<\/span><\/h2>\n\n\n\n<p>Her ne kadar yukar\u0131dakiler kadar b\u00fcy\u00fck bir geli\u015fme olmasa da PHP 8, match ifadesinin kullan\u0131m\u0131n\u0131 da sa\u011flar. Yeni match ifadesi ile sistemde swich \u00f6zelli\u011fine \u00e7ok benzeyen bir yap\u0131 kar\u015f\u0131n\u0131za \u00e7\u0131kar.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Match ifadesi ile sunucu, bir de\u011fi\u015fken i\u00e7erisinde saklanabilir.<\/li><li>Match ifadesi, tek sat\u0131rl\u0131k ifadeleri destekler. Sistemin kullan\u0131lmas\u0131 i\u00e7in break kullan\u0131m\u0131na ihtiya\u00e7 duyulmaz.<\/li><li>Match, strict t\u00fcr\u00fcnde bir kar\u015f\u0131la\u015ft\u0131rma yapar.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-nullsafe-operat-r-n-n-kullan-m\"><span id=\"nullsafe-operatorunun-kullanimi\">Nullsafe Operat\u00f6r\u00fcn\u00fcn Kullan\u0131m\u0131<\/span><\/h2>\n\n\n\n<p>Nullsafe operat\u00f6r\u00fcn\u00fcn kullan\u0131lmas\u0131 ile kod y\u0131\u011f\u0131nlar\u0131 ortadan kald\u0131r\u0131labilir. Null operat\u00f6r\u00fcn\u00fc bir zincir olarak kullanabilirsiniz. Zincirin bir noktas\u0131nda Null de\u011feri d\u00f6nerken ba\u015flang\u0131c\u0131nda da Null yer al\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-metin-ve-say-kar-la-t-rmalar\"><span id=\"metin-ve-sayi-karsilastirmalari\">Metin ve Say\u0131 Kar\u015f\u0131la\u015ft\u0131rmalar\u0131<\/span><\/h2>\n\n\n\n<p>PHP\u2019nin eski versiyonunda metin ve say\u0131 de\u011ferlerinin kar\u015f\u0131la\u015ft\u0131r\u0131lmas\u0131 esnas\u0131nda metin de\u011ferleri say\u0131 de\u011ferine \u00e7evrilirdi. Kar\u015f\u0131la\u015ft\u0131rma ise iki say\u0131 de\u011feri aras\u0131nda yap\u0131l\u0131rd\u0131. Bu durumda metin de\u011ferinin ger\u00e7ekte say\u0131 ifade etmemesinden dolay\u0131 bir k\u0131s\u0131m hatalara neden olurdu. <\/p>\n\n\n\n<p>PHP 8 versiyonunda ise ger\u00e7ekten say\u0131 de\u011feri ifade etmeyen metinlerin \u00e7evirisi yap\u0131lmaz. Bunun yerine say\u0131 de\u011ferleri metin t\u00fcr\u00fcne d\u00f6n\u00fc\u015ft\u00fcr\u00fclerek iki metnin ayn\u0131 olup olmad\u0131\u011f\u0131 kontrol edilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-g-ncel-versiyondan-elde-edilen-sonu\"><span id=\"guncel-versiyondan-elde-edilen-sonuc\">G\u00fcncel Versiyondan Elde Edilen Sonu\u00e7<\/span><\/h2>\n\n\n\n<p>PHP8, kullan\u0131c\u0131lar\u0131n i\u015fini kolayla\u015ft\u0131racak bir\u00e7ok \u00f6zelli\u011fi ihtiva ediyor. S\u00f6z konusu \u00f6zelliklerin ba\u015f\u0131nda kodun okunabilir ve anla\u015f\u0131l\u0131r \u015fekilde yaz\u0131lmas\u0131 yer al\u0131yor. Bunlar\u0131n yan\u0131nda da yeni versiyon ile bir\u00e7ok \u00f6zelli\u011fin sisteme dahil edildi\u011fini g\u00f6rebilirsiniz.<\/p>\n\n\n\n<p>PHP 8 kullanmak i\u00e7in baz\u0131 durumlar\u0131 da g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gerekiyor:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>E\u011fer payla\u015f\u0131ml\u0131 sunucu kullan\u0131yorsan\u0131z, servis sa\u011flay\u0131c\u0131n\u0131z taraf\u0131ndan verilen hizmetin PHP 8 \u00f6zelli\u011fi ile sunulmas\u0131n\u0131 beklemek zorunda kalabilirsiniz.<\/li><li>Eski versiyonlarda kullan\u0131lan eklentileriniz varsa, yeni s\u00fcr\u00fcm i\u00e7in bu eklentilerin g\u00fcncellemelerini beklemeniz gerekebilir.<\/li><\/ul>\n\n\n\n<p>PHP programc\u0131l\u0131\u011f\u0131n\u0131n 8.0 versiyonu ile kod yazma i\u015flemleriniz kolayla\u015f\u0131r ve k\u0131sa s\u00fcrede sonuca ula\u015fabilirsiniz. T\u00fcm bu \u00f6zellikler g\u00f6z \u00f6n\u00fcnde bulunduruldu\u011funda PHP 8.0, kullanmaya de\u011fer bir programlama dilidir.<\/p>\n","protected":false},"excerpt":{"rendered":"PHP 8 g\u00fcncellemesi ile yeni adland\u0131rmalar yap\u0131lm\u0131\u015f arg\u00fcmanlar\u0131n, birle\u015ftirme t\u00fcrlerinin, yap\u0131c\u0131 \u00f6zellik tan\u0131t\u0131mlar\u0131n\u0131n, \u00f6zniteliklerin, e\u015fle\u015fme ifadelerinin JIT sistemindeki&hellip;\n","protected":false},"author":7,"featured_media":31008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[652],"tags":[1316,1315],"class_list":{"0":"post-30999","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-nedir","8":"tag-php-8","9":"tag-php8"},"_links":{"self":[{"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/posts\/30999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/comments?post=30999"}],"version-history":[{"count":0,"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/posts\/30999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/media\/31008"}],"wp:attachment":[{"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/media?parent=30999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/categories?post=30999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.natro.com\/blog\/wp-json\/wp\/v2\/tags?post=30999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}