WordPress sitenizi PHP 8 için nasıl hazırlarsınız?

Yayınlanan: 2022-07-06

WordPress siteleri PHP gerektirir ve PHP geliştikçe WordPress de ayak uydurmuştur. Yakın zamanda PHP 7.4, WordPress VIP Platformunda PHP'nin varsayılan sürümü olmuştur. Bununla birlikte, PHP 7.4, Kasım 2022'de güvenlik desteğinin sonuna geldiğinden, güçlü güvenliği sürdürmek için WordPress sitelerinin yükseltilmesi gerekecek. Bu nedenle WordPress VIP platformu, tüm müşteri uygulamalarımızı PHP 8.0 üzerinde çalışacak şekilde taşıyacaktır.

Aşağıda, değişikliklerin bir açıklaması ve hem müşterilerimizin hem de diğer platformlarda WordPress kullanan diğer kişilerin hazırlanmak için yapabilecekleri adımlar yer almaktadır.

İçindekiler

  • PHP 8.0 hikayesi
    • Yeni özellikler
    • PHP ve WordPress topluluklarında desteğin yaygınlaşması
  • PHP 8.0 uyumluluk sorunları nasıl bulunur?
    • PHPCompatibility standardıyla PHP_CodeSniffer kullanın
    • PHP 8.0 altında PHP ölümcül hataları olan bilinen PHP Uyarılarını ele alın
    • Otomatik testler oluşturun
    • PHPStan/Psalm veya başka bir statik analiz aracı kullanın
  • WordPress VIP'de PHP 8.0 ile nasıl başlanır?
    • Uygulamayı yerel olarak çalıştırın
    • Çekme isteklerinde VIP Kod Analizi Botunu kontrol edin
    • WordPress VIP uygulamalarınızda PHP 8'i etkinleştirin
    • Proaktif yardımdan yararlanın
  • PHP 8.1 ne olacak?

PHP 8.0 hikayesi

Kasım 2020'de piyasaya sürülen PHP 8.0, yeni kodu (ve daha kısa kodu) hatalara karşı daha dayanıklı hale getiren çeşitli geliştirmeler ve özellikler sağladı.

Çoğu geliştirici PHP 8.0'da önemli faydalar bulacaktır. Ancak, ana sürüm olarak, birkaç kırılma değişikliği içerir. Bu, PHP 7.4'ten PHP 8.0'a geçişi, örneğin PHP 7.3'ten PHP 7.4'e geçişten daha zor hale getirir. Spesifik olarak, temel PHP'de 49 ve genel olarak PHP 8'de 169, kodunuzun güvenebileceği kitaplıklar ve uzantılar da dahil olmak üzere, kırılmaya yönelik değişiklikler vardı.

İyi haber şu ki, kuruluşlar PHP 8.0'a geçtiğinde, Kasım 2023'e kadar temel PHP projesinden güvenlik desteği alacaklar. Bu tarihten sonra, bir kuruluşun çok daha küçük bir değişiklik gerektiren küçük bir sürüm olan PHP 8.1'e yükseltme yapması gerekecek.

Yeni özellikler

PHP 8.0, 1) PHP'yi daha sağlam ve öngörülebilir bir betik dili yapmak için uç durumları ve tutarsızlıkları düzeltmek ve 2) dili genel olarak geliştirmek için yeni özellikler sağlamak için tasarlanmıştır. Bunlar, aşağıdakileri sağlayan birkaç yeni sözdizimi içerir:

  • Birleşim türleri, static ve mixed türler, Stringable arabirim ve sayıların işlenmesindeki değişiklikler gibi kesin olarak yazılan kod yazmayı kolaylaştırın.
  • Korumanız gereken kod miktarını azaltın, örneğin, nullsafe operatörü, yapıcı özelliği promosyonu, match operatörü ve yakalama dışı yakalamalar.
  • Nesnelerde ::class class'a izin vermek, parametre listelerinde virgülden sonra, str_contains() , str_starts_with() ve str_ends_with() işlevleri, ifade atmak, nitelikler gibi kodu basitleştirin.

Ayrıca Adlandırılmış Parametreleri de içerir. Ancak, WordPress çekirdeğinin bu özellikle uyumlu olduğunu iddia etmediğini belirtmekte fayda var. Bu nedenle, kendi özel işlevlerinizi adlandırılmış parametrelerle çağırabilirsiniz, ancak gelecekte parametre adları uyarı vermeden değişebileceğinden WordPress işlevlerini çağırmamalısınız.

PHP ve WordPress topluluklarında desteğin yaygınlaşması

Yeni sözdizimi içeren yeni bir PHP sürümü yayınlandığında, yeni sözdizimlerinin PHP ve WordPress topluluklarında desteklenmesi zaman alır.

PHP geliştirici araçları

Composer, PHPUnit, PHP_CodeSniffer, PHPStan, Xdebug ve çeşitli IDE'ler gibi PHP geliştirme araçlarının tümü, PHP'nin yeni bir sürümünün yeni sözdizimlerini tanımaya ihtiyaç duyar. PHP sürekli olarak geliştirilirken, yeni bir sürüm etrafındaki tam ekosistemin kullanıma sunulmasından önce bir gecikme olabilir. Bununla birlikte, geliştirme çalışmaları, önceden kullanıma sunulan alfa , beta ve sürüm adayı sürümlerine dayalı olarak gerçekleştirildiğinden, çoğu zaman, son sürüm hazır olana kadar araçlar kullanıma hazır olabilir. Tüm bu araçlar ve daha fazlası artık PHP 8.0'ı destekliyor, bu da onu PHP kodu geliştirmek ve özellikle WordPress geliştirmek için iyi bir seçim haline getiriyor.

WordPress çekirdeği

Ardından, WordPress çekirdeğinin PHP 8.0'ı desteklemesi gerekiyor. WordPress projesi, piyasaya sürüldüklerinde PHP'nin yeni sürümleriyle uzun bir uyumluluk geçmişine sahiptir. Make WP'deki bu iyi yazılmış gönderiye göre, WordPress, Aralık 2020'deki WordPress 5.6 sürümünden bu yana PHP 8.0 ile "beta uyumluluğuna" sahiptir. "Beta uyumluluğu" ne anlama geliyor? Bu, WordPress'in PHP 8.0'da sorunsuz çalışabileceği anlamına gelir, ancak WordPress çekirdek dosyalarında katı türler bildirmek veya WordPress çekirdek işlevleriyle adlandırılmış parametreleri kullanmak gibi özellikler desteklenmez.

WordPress VIP platformu

WordPress VIP platformu, platformun kurumsal ihtiyaçları karşılamasını sağlayan eklentiler ve özellikler paketi de dahil olmak üzere Mayıs 2022'den beri PHP 8.0'ı (ve PHP 8.1) desteklemektedir.

Üçüncü taraf eklentiler

WordPress on binlerce eklentiye sahiptir ve PHP 8.0 için destek düzeyi çok değişkendir. Örneğin, yeni ayrılmış sözcükler bir eklenti tarafından kullanılmaya devam edebilir veya PHP yerel işlevlerine iletilen parametreler şu anda beklenen türde olmayabilir. Bu nedenle, üçüncü taraf eklentiler, PHP 8.0 ile uyumsuzlukların uygulamanızı etkileyebileceği alanlardan biri olabilir.

Aşağıda bu uyumsuzluklardan bazılarını nasıl kontrol edeceğinizi öğrenebilirsiniz. Seçenekler arasında, yukarı yönlü bireyden/ekipten düzeltmeleri yapmasını ve yeni bir sürüm çıkarmasını istemek veya öne çıkan ortaklarımızdan biri gibi bir kurum içi geliştirme ekibine veya bir ajansa sahip olmak, eklentiyi çatallamak ve düzeltmeleri kendileri yapmak yer alır.

Özel eklentiler

WordPress VIP platformundaki neredeyse her müşteri bir veya daha fazla özel eklenti kullanır. Üçüncü taraf eklentiler gibi, uyumluluklarının da kontrol edilmesi gerekir. Orijinal geliştiricilerden keşfedilen sorunları çözmelerini istemek genellikle en iyi eylem şeklidir.

Üçüncü taraf veya özel temalar

Eklentiler uyumluluk sorunlarının en olası kaynağı olsa da, üçüncü taraf ve özel temaların da PHP 8.0 ile uyumlu olması gerektiğini unutmayın. Eklenti kodu uyumluluğunu kontrol etmenin aynı yaklaşımı tema kodu için de geçerlidir.

PHP 8.0 uyumluluk sorunları nasıl bulunur?

Geliştirme ekiplerinin uyumluluk sorunlarını belirlemek üzere kodu gözden geçirmek için kullanabileceği dört ana yaklaşım vardır:

  1. PHPCompatibility standardıyla PHP_CodeSniffer kullanın.
  2. PHP 8.0 altında PHP Ölümcül Hatalar olan bilinen PHP Uyarılarını ele alın.
  3. Otomatik testler oluşturun.
  4. PHPStan/Psalm veya başka bir statik analiz aracı kullanın.

PHPCompatibility standardıyla PHP_CodeSniffer kullanın

PHP_CodeSniffer (PHPCS), PHP dosyalarını tokenize eder ve tanımlanmış bir dizi kodlama standardının ihlallerini tespit eder. WordPress Kodlama Standartları ve (müşterileri kullanmaya teşvik ettiğimiz) kendi VIP Kodlama Standartlarımız için paketler vardır.

PHPCompatibility ve PHPCompatibilityWP adlı paketler de vardır ve bu standartlar PHP'nin sürümler arası uyumluluğu için bir kod tabanını analiz eder.

Sonuçlar, araç yeteneklerine ve hazır olma durumuna bağlı olduğundan, sürüm 10 yayınlanana kadar PHPCompatibility'nin develop dalını kullanmak önemlidir. Sürüm 10, PHP 8.0 (ve PHP 8.1) uyumluluğu ile ilgili bilgileri içerecektir. Geliştirme develop kullanmak için yapılandırmanızı nasıl kuracağınıza ilişkin talimatlar için belgelerimize bakın. Sürüm 10 yayınlandığında, bunun yerine bu sürümü kullanabilirsiniz.

PHPCompatbilityWP paketi, PHPCompatibility paketinin üzerine kuruludur, ancak WordPress çekirdeğinin içerdiği geriye dönük uyumluluk öğeleri için birkaç kontrolü kapatır.

PHPCS ve PHPCompatibility/PHPCompatibilityWP kurulumu ile bir kontrol gerçekleştirebilirsiniz:

 phpcs --standard=PHPCompatibilityWP --severity=1 --runtime-set testVersion 8.0- --extensions=php <path-to-code>

<path-to-code> , küçük bir başlangıç ​​yapmak istiyorsanız tek bir özel veya üçüncü taraf eklentisi veya teması veya araştırılması ve ele alınması gereken tüm ihlalleri görmek istiyorsanız tüm depo olabilir.

Tarama adımları, olası her PHP sürüm uyumluluğu sorununu (yanlış çalışma zamanı değer türleri gibi) tespit etmeyecek, ancak sözdizimi ile ilgili en yaygın sorunları belirlemeye yardımcı olacaktır.

PHP 8.0 altında PHP ölümcül hataları olan bilinen PHP Uyarılarını ele alın

PHP 8.0, Uyarıların ölümcül Hata ve TypeError İstisnalarına dönüştüğü (ve bazı Bildirimlerin Uyarılar haline geldiği) bazı yeniden sınıflandırılmış motor uyarıları gördü. PHP 7.4 altında aranacak PHP Uyarı metinleri şunlardır:

  • Attempt to assign property '*' of non-object
  • Attempt to modify property '*' of non-object
  • Attempt to increment/decrement property '*' of non-object
  • Creating default object from empty value
  • Cannot use a scalar value as an array
  • Cannot add element to the array as the next element is already occupied
  • Cannot unset offset in a non-array variable
  • Only arrays and Traversables can be unpacked
  • Invalid argument supplied for foreach()
  • Illegal offset type
  • Illegal offset type in isset or empty
  • Illegal offset type in unset
  • Cannot assign an empty string to a string offset
  • Division by zero
  • Use of undefined constant *

Bu Uyarıları düzeltmek, uygulamanın PHP 8.0 ile uyumlu olması için gereklidir.

Not: PHP 8.0 altında, PHP 7.4 altında Uyarı bile olmayan başka önemli hatalar vardır. Örnekler şunları içerir:

  • Yapıcı dışında özel yöntemler nihai olarak bildirilemez.
  • Sihirli yöntemler için geçersiz imzalar.
  • Soyut özellik yöntemi imza doğrulaması
  • Bir ebeveyn sınıfıyla parent:: kullanma.
  • Uyumsuz aşırı yüklenmiş yöntem imzaları (Liskov Değiştirme İlkesi)

Bu bilinen değişiklikleri ele almak, başlamak için iyi bir yerdir. TypeError, tüm dahili PHP işlevleri için, örneğin, katı tür denetimi bildirilmese bile geçersiz parametre türleri iletildiğinde, tutarlı bir şekilde atılır.

Ayrıca, @ operatörünün artık PHP 8.0 altında önemli hataları susturmayacağını unutmayın.

Doğal olarak, uygulamanız ideal olarak hiçbir hata, uyarı ve bildirim oluşturmamalıdır. Bulduğunuz her şeyi ele almanız teşvik edilir. 8.x altındaki bazı PHP Uyarıları, örneğin PHP 8.x altında potansiyel olarak yanlış mantıkla sonuçlanacak şekilde PHP 9.0 altında ölümcül hatalar olacaktır. Bu tür sorunları ve geliştirme sırasında "keşiften kaçan" sorunları gidermek için sürüm öncesi ve sonrası geliştirme süresi oluşturmak en iyi uygulamadır. Aynı zamanda site kararlılığına yapılan bir yatırımdır ve ilgili özellik için kabul kriterlerini doğru bir şekilde karşılama yeteneğidir.

Otomatik testler oluşturun

Birçok farklı otomatik test türü vardır, ancak burada şunu kastediyoruz:

  • Birim testleri—WordPress tarafından tanımlanan işlevler veya sınıflarla alay eder ve testleri çalıştırmak için kullanılabilir olması için bir veritabanı örneğine ihtiyaç duymaz.
  • Entegrasyon testleri — WordPress'i yükler ve gerçek bir test veritabanı kullanır

Bu konu burada ele alınamayacak kadar büyük, ancak dikkate alınması gereken birkaç şey var:

  • Sonuçlar, test paketinin eksiksizliğine bağlıdır. Çok fazla testiniz yoksa, uyumluluğu sağlamak için gerekli teminattan yoksun olacaksınız.
  • Katı iddialar kullanın. Örneğin, assertEquals() kullanmak gevşek bir karşılaştırma yaparken, assertSame() ayrıca türü de kontrol eder.
  • Sıkı kod kapsamı kullanın. PHPUnit yapılandırma dosyasına beStrictAboutCoversAnnotations=”true” ve forceCoversAnnotations=”true” ekleyin ve ardından testler arasında doğru uluslararası kod kapsamı düzeyini bulmak için @covers ek açıklamalarını kullanın.
  • İşlevlerin beklenen şekilde başarısız olduğundan emin olmak için mutlu (beklenen girdilere dayalı davranış) ve mutsuz (beklenmeyen girdilere dayalı davranış) yollarını test edin, çünkü katılıkla ilgili çoğu sorun burada ortaya çıkar.
  • Testlerinizi PHP 8.0'da çalıştırın. Entegrasyon (WordPress) testleri için, PHP 8.0'ı destekleyen PHPUnit'in sonraki sürümleri kullanılarak kilidi açılan WordPress çekirdek test paketinde 2021'de değişiklikler yapıldı. Bu, PHPUnit Polyfills, Brain Monkey ve Mockery desteği, WordPress işlevleri için ek işlev taslakları ve içerik oluşturma için fabrika yöntemleri gibi tüm WP yerel test yardımcı programlarına erişim içeren WP Test Utils paketi tarafından desteklenir.
  • Uyumluluk değişikliğinin başarılı olduğundan daha emin olmak için bir düzeltmeyi denemeden önce testler yazmayı düşünün.

PHPStan/Psalm veya başka bir statik analiz aracı kullanın

PHPCS bazı uyumsuzlukları yakalayacak olsa da, PHPCS'nin yakalamak için tasarlanmamış bazı çalışma zamanı değişiklikleri vardır. Kaçırılacak bir örnek, yerel PHP işlevlerinin, hangi türlerin parametre olarak geçirilebileceği konusunda daha katı olmasıdır.

PHPStan, Psalm veya başka bir statik analiz aracı gibi bir araç burada yardımcı olabilir. Ancak, en etkili olmaları için, kod tabanınızın katı türler (koddaki parametre ve dönüş türleri) kullanmasını veya doğru şekilde belgelenmesini (DocBlocks'ta @param ve @return satırları) gerektirirler.

Bu araçlar tipik olarak, önce en düşük düzeydeki sorunları düzeltmeye ve ardından kod tabanınızın kalitesini artırmak için aracı kademeli olarak entegre etmeye izin veren kural düzeylerine sahiptir.

Phpstan-wordpress ve psalm-plugin-wordpress gibi uzantılar aracılığıyla WordPress çekirdek kodu türleri için bilgi ekleyebilirsiniz.

Yapılandırıldıktan sonra, her çalıştırma, beklenmeyen türleri işlevlere geçirdiğiniz yeri vurgulayacaktır, bu da önemli TypeError İstisnalarının atılmasına neden olabilir. Bunların her birinin düzeltilmesi gerekecek.

Çoğu durumda, try-catch blokları veya typecasting kullanarak bir TypeError istisnasını bastırabilirsiniz. Ancak kesinlikle yapmamanızı öneririz. Temel nedeni düzeltmek, daha güçlü, daha az kırılgan ve hataya açık kodlara yol açacak ve uzun vadede neredeyse her zaman karşılığını verecektir.

WordPress VIP'de PHP 8.0 ile nasıl başlanır?

Uygulamayı yerel olarak çalıştırın

Uygulamanın bir örneğini yerel olarak çalıştırmak, uyumluluk sorunlarını tespit edip düzeltebilmek için mantıklı bir ilk adımdır. WordPress VIP platformuyla en iyi eşliği sağlamak için herhangi bir yerel geliştirme ortamını kullanabilirsiniz, ancak VIP Yerel Geliştirme Ortamı'nı öneririz. vip dev-env create --php=8.0 komutunu çalıştırarak (VIP-CLI 2.9.5 veya üstü ile) ve ardından Kurulum Sihirbazının geri kalanını tamamladığınızda, uygulamanız PHP 8.0 ile yerel olarak çalışacaktır.

Çekme isteklerinde VIP Kod Analizi Botunu kontrol edin

wpcomvip organizasyonu altında deponuza yapılan herhangi bir çekme isteğine bakarsanız, VIP Kod Analiz Botunun size PHPCS, PHP linting ve SVG linting hakkında geri bildirim verdiğini göreceksiniz.

PHP Linting adımı için bot, PHP kodunu, havuzun konuşlandırıldığı bir uygulama için kullanılan herhangi bir PHP sürümüyle lint edecektir. Bu sürüm PHP 7.4 ise, gelecek geçişe hazırlık olarak artık PHP 8.0 kullanarak da otomatik olarak tiftiklenecektir.

WordPress VIP uygulamalarınızda PHP 8'i etkinleştirin

Yerel olarak yapabildiğiniz kadar çok kontrol ve düzeltme yaptıktan sonra, WordPress VIP uygulamanızda PHP 8.0'ı etkinleştirmenin zamanı geldi. En düşük ortamınızla başlayın ve üretim ortamına geçmeden önce her şeyin iyi göründüğünü kontrol edin (vip-cli aracılığıyla PHP günlükleri veya VIP Panosundaki Sağlık Günlükleri dahil).

PHP 8.0'ı bir ortamda etkinleştirmek için, hangi uygulamada ve ortamda etkinleştirilmesini istediğinizi bize bildiren bir Zendesk bileti açın.

PHP sürümünün bilet açmaya gerek kalmadan değiştirilmesini sağlamak için yakında VIP Dashboard'da yeni bir özellik yayınlayacağız. En son bilgiler için daima Lobiyi kontrol edin.

Proaktif yardımdan yararlanın

Premier müşteriler için hesap ekipleri, onları nasıl destekleyebileceğimizi tartışmak için müşterilere zaten ulaşıyor. Onlara PHPCS'den sonuçlar gönderilecek ve bu kontrollerin kendilerinin nasıl çalıştırılacağı konusunda rehberlik sağlanacak. Ölümcül hatalara dönüşecek PHP Uyarıları da vurgulanacak ve uyumsuzlukları ele alma konusunda onlara bir başlangıç ​​sağlayacaktır.

PHP 8.1 ne olacak?

WordPress VIP platformu ayrıca PHP 8.1'i destekler. PHP 8.0 ve PHP 8.1 arasında PHP 7.4 ve 8.0 arasında olduğundan daha az değişiklik vardır, bu da daha az uyumsuzluk olması gerektiği anlamına gelir.

PHP 8.1:

  • Kasım 2023'e kadar PHP çekirdek geliştiricilerinden aktif desteğe ve Kasım 2024'e kadar güvenlik desteğine sahiptir.
  • PHP 8.0'dan saniyede daha fazla istek işleyebilir.
  • WordPress 5.9 ve üzeri sürümlerde "beta uyumluluğu" desteği vardır - bu, PHP 9'a hazırlık aşamasında bazı kullanımdan kaldırma bildirimlerinin olduğu, ancak WordPress çekirdeğinin davranışını etkilemediği anlamına gelir.

PHP 8.0 için gereken, katı bir şekilde yazılmış kod kullanmak ve otomatik testler eklemek gibi faydalı değişiklikler, PHP 8.1'in kullanıma sunulmasının yanı sıra WordPress 6.1, 6.2, 6.3 ve sonraki sürümler için yükseltmelerin yanı sıra yaptığınız tüm özellik sürümlerinde yardımcı olacaktır. KG süreci genellikle darboğazdır, bu nedenle ana hatlarıyla belirttiğimiz bazı araç ve yaklaşımları kullanmak, el emeğini azaltabilir ve bu değişiklikleri uygularken size daha fazla güven verebilir.

Müşterilerin PHP 8.0 ile ilgili soruları varsa, lütfen bizimle bilet açın.