Öneklemenin Ötesinde: PHP Ad Alanları İçin Bir WordPress Geliştirici Kılavuzu
Yayınlanan: 2019-11-12Her şeyi önek.
WordPress yazılımının kendisi kadar eski bir atasözüdür. Önekleme, WordPress geliştiricileri için o kadar uzun zamandır bir standarttı ki, farklı bir şey yapmayı hayal etmek zor. Ancak, yeni bir şeyin zamanı geldi. Vadesi çoktan geçti, ancak WordPress, daha büyük PHP dünyasındaki standart uygulamalarda biraz geride kalıyor.
Ön ek, proje adınızın kod dostu bir sürümünü oluşturma ve onu global ad alanındaki işlevlerin, sınıfların ve diğer şeylerin önüne yapıştırma uygulamasıdır. Örneğin, önemli bir hataya neden olabilecek işlev adı çakışmalarını önlemek için bir işlevi tavern_get_post() yerine get_post() olarak adlandırırsınız.
Ön ek, bu alandaki adların belirli bir projeye ait olduğunu söylemenin süslü bir yolu olan "ad alanı"nın bir biçimidir. Bununla birlikte, ön ek (ve daha az yaygın olan son ek), PHP dili için hiçbir çözümün olmadığı bir zamandan kalma bir hack'tir.
PHP 5.3, resmi bir ad alanı yöntemi tanıttı, bu nedenle standart yıllardır var. WordPress 5.2, minimum PHP gereksinimini 5.6'ya çıkardığından, geliştiricilerin eski alışkanlıklarını bırakma ve PHP dünyasının geri kalanına yetişme zamanı geldi.
Ad Alanı (Neredeyse) Her Şey
PHP ad alanı yalnızca aşağıdaki öğeleri kapsar.
- sınıflar
- Arayüzler
- Özellikler
- Fonksiyonlar
-
constanahtar sözcüğüyle bildirilen ancakdefine()ile bildirilmeyen sabitler
Genel ad alanındaki komut dosyası tanıtıcıları, görüntü boyutu adları, veritabanı seçenekleri ve diğer öğeler söz konusu olduğunda, yine de bunları öneklemelisiniz. Bunlar kimliklerdir ve PHP ad alanının kapsamı dışındadır.
Ad Alanları Nasıl Oluşturulur
Ad alanlarının bildirilmesi basittir. Belirli bir ad alanını kullanmak istediğiniz herhangi bir PHP dosyasının üstünde, onu aşağıdaki kod parçacığında gösterildiği gibi bildirin.
<?php ad alanı Tavern;
Bu kod satırının yaptığı, bu dosyadaki her şeyin Tavern ad alanına sahip olduğunu bildirmektir.
Hello, World! İleti.
<?php
ad alanı Tavern;
fonksiyon merhaba() {
_e( 'Merhaba Dünya!', 'örnek-metin-alanı');
} Eski önek kurallarını takip etseydi, hello() tavern_hello() olarak adlandırılırdı. Ancak, ad alanlarında durum böyle değil. hello() işlevi, Tavern ad alanı içinde kapsüllenir ve hello() adlı diğer işlevlerle çakışmaz.
Sınıflar ve arabirimler, işlevlerle aynı şekilde çalışır. Article sınıf adıyla, sınıf dosyası aşağıdaki gibi görünebilir.
<?php
ad alanı Tavern;
sınıf Madde {
// ...
}Not: Dosya başına yalnızca bir sınıf veya arabirim olmalıdır. Bu, bir otomatik yükleyici kullanmayı planlıyorsanız özellikle önemlidir.
Ad Alanları Nasıl Adlandırılır
Geliştiriciler, şeyleri nasıl adlandıracakları konusunda tartışmayı severler ve herkese uyan tek bir çözüm yoktur. En önemli kural, diğer projelerden gelen kodlarla çakışmaları önlemek için benzersiz olmaktır. Bunu yapmanın en iyi yollarından biri, bir Package alt ad alanı ile bir üst düzey Vendor ad alanı kullanmaktır.
Satıcı ad alanının Tavern olduğunu ve söz konusu projenin News adlı bir WordPress teması olduğunu varsayalım. Projenin ad alanı aşağıdaki gibi görünebilir.
<?php ad alanı Tavern\News;
Bu, bazı geliştiriciler için biraz ayrıntılı olabilir. Projenizin adı “Muhteşem sos” gibi zaten oldukça benzersizse, aşağıdakileri kullanmak isteyebilirsiniz.
<?php ad alanı Awesomesauce;
En azından kendiniz için bir tür standart sözleşme bulmak isteyeceksiniz. Sonunda otomatik yükleme gibi şeylere girmek isteyeceksiniz, bu nedenle tüm projelerinizde takip ettiğiniz bir sisteme sahip olmak yardımcı olacaktır. PHP-FIG Autoloader standardını incelemekten çekinmeyin.
Sınıfları ve İşlevleri Farklı Bir Ad Alanına Aktarma
Geçerli ad alanından farklı bir ad alanından bir sınıf veya işlev kullanmanız gerektiğinde, onu içe aktarmanız gerekir. Bu, PHP'deki use anahtar sözcüğü ile yapılır.
use ifadesi, namespace bildiriminden sonra gelmelidir. Ayrıca tam nitelikli sınıf adına da atıfta bulunmalıdır. Aşağıdaki kod, Tavern\Helpers\Post sınıfını farklı bir ad alanına sahip bir dosyaya aktarır.

<?php ad alanı Tavern\Şablon; Tavern\Helpers\Post'u kullanın;
İçe aktarıldıktan sonra, bir sonraki parçada gösterildiği gibi Post sınıfını doğrudan kullanabilirsiniz.
$post = yeni Mesaj();
PHP 5.6'dan itibaren, sırasıyla use function ve use const anahtar sözcüklerini kullanarak diğer ad alanlarından işlevleri ve sabitleri içe aktarabilirsiniz. Aşağıdaki kod bloğu, hem bir işlevin hem de bir sabitin nasıl içe aktarılacağını gösterir.
<?php ad alanı Tavern\Şablon; Tavern\Helpers\işlev_adı işlevini kullanın; const Tavern\Helpers\CONSTANT_NAME kullanın;
Sınıfları ve İşlevleri Aliasing
Sonunda, geçerli ad alanı içinde bir sınıf veya işlevle aynı ada sahip bir sınıf veya işlevi içe aktarmanız gereken bir durumla karşılaşacaksınız. Ad alanlarının çözmesi gereken sorunun bu olduğunu düşünüyor olabilirsiniz. Neyse ki PHP, içe aktarma sırasında bir takma ad oluşturma yöntemi sağlar.
Tavern\User adında bir sınıfınız olduğunu ve Tavern\Contracts\User arabirimini uygulamanız gerektiğini varsayalım. Arayüzü içe aktarırken, aşağıda gösterildiği gibi bir takma ad oluşturmanız gerekecektir.
<?php
ad alanı Tavern;
Tavern\Contracts\User'ı UserContract olarak kullanın;
class Kullanıcı, UserContract'ı uygular {
// ...
} use ifadesinin sonuna eklenen as UserContract , User arabirimi için bir diğer ad oluşturur. Yeni UserContract adını hatasız olarak güvenle kullanabilirsiniz.
Sınıflar, arabirimler, işlevler ve sabitlerin tümü, bir takma ad oluşturmak için aynı yöntemi takip eder.
Ad Alanlarına Dayalı Klasör Yapısını Düzenleme
Ad alanları ve projenin dosya ve klasör yapısının eşleşmesi, daha geniş PHP dünyasında standart bir uygulamadır. Bunu yapmak, diğer geliştiricilerin projenizdeki kodu kolayca bulmasını kolaylaştırır. Ayrıca, talep üzerine sınıfları yüklemek için otomatik yükleyiciler oluşturmayı da kolaylaştırır.
Genel olarak, tüm PHP kodları projenizdeki /src , /inc veya benzer adlı bir klasöre gitmelidir. Örnek bir eklenti dosya ve klasör yapısı aşağıdaki gibi görünebilir.
/eklenti adı
/src
/Çekirdek
/Activate.php
/Setup.php
/Görüş
/Post.php
/Sayfa.php Ad alanlarıyla aynı yapıyı izliyorsanız, yukarıdaki .php dosyaları aşağıdaki sınıfları içerecektir.
-
Tavern\Core\Activate -
Tavern\Core\Setup -
Tavern\View\Post -
Tavern\View\Page
Dosya ve klasör adlarının büyük/küçük harf duyarlı olduğunu ve ad alanı ve sınıf adıyla tam olarak eşleşmesi gerektiğini unutmayın.
Tabii ki, istediğiniz herhangi bir sözleşmeyi takip etmekte özgürsünüz. Bununla birlikte, önceki tavsiye iyi bir uygulamadır ve projelerinizi uzun vadede nasıl organize edeceğinizi basitleştirecektir.
Ad Alanlarını Kullanmanın Faydaları
En belirgin yararı, aynı ada sahip sınıflar ve işlevler arasındaki çatışmalardan kaçınmaktır. Ön ekleri kullandığınız nedenle gerçek ad alanlarını kullanmalısınız.
Ad alanları, uzun sınıf adlarından kaçınmaya yardımcı olur. Büyük bir proje boyunca uzun isimler yazmak en iyi ihtimalle sıkıcı bir uygulamadır.
İçe aktararak uygulamaları daha kolay değiştirin. Diğer ad alanlarından sınıfları ve arabirimleri içe aktarmaya alıştıktan sonra, bir arabirimin uygulamasını tek bir kod satırıyla değiştirebilirsiniz.
En azından bir üst düzey ad alanı gerektiren PSR-4: Autoloader standardını izlerseniz, sınıfları otomatik olarak yüklemek çok daha kolaydır.
Profesyonel alandaki geliştiriciler için WordPress ekosisteminin ötesinde pazarlanabilir bir beceri kazanacaksınız. Ad alanlarını nasıl kullanacağınızı bilmiyorsanız, PHP geliştirme işini bulmakta zorlanacaksınız. Kavraması zor bir kavram değil, ancak uygulamada bazıları için bir öğrenme eğrisi olabilir.
