Statik & amp kullanma;Veritabanı soyutlamanızın sonlarında statik bağlanma
Bazı durumlarda, e -ticaret mağazalarındaki siparişler gibi belirli öğelerle çalışmak için nesneler üreten sınıflar yapmak mükemmeldir. Her ihtiyacınız olduğunda bir sınıf yapar ve yeni bir nesne örneği oluşturursunuz. Tersine, eklenti seçeneği gibi bazı veriler gerçekten sadece bir “depolama” gerektirir. Bu, tüm statik yöntemlerle sınıf için mükemmel bir kullanımdır. Bu makalede, eklentilerde veya temalarda kullanılan seçenekler için veritabanı soyutlamasının nasıl oluşturulacağını göstereceğim ve tüm yararlı statik yöntemlere sahip sınıfın ne zaman geç statik bağlanmayı açıkladığına dair örnekler vereceğim.
Tüm statik yöntemlerin PHP’de birkaç problemi çözebileceği bir sınıf oluşturma. Örneğin, verileri doğrulayan veya biçimlendiren sınıflar. Neden her veri toplama için işlenecek yeni bir nesne örneği oluşturuluyor? Bu “statik sınıf” bir grup fonksiyona benzer, ancak görünürlük ve miras kullanabilirler. Ayrıca, statik yöntemler statik özellik kullanarak verileri paylaşabilir. Bunu yapmadan önce, doğrulama için kullanılan sınıfın basit bir örneğine bakalım. Bu, bu tür sınıfın eklentinizde nasıl yararlı olabileceğini gösterir, çünkü küresel olarak mevcuttur. Bu tür bir doğrulama, aşağıda göstereceğim gibi seçenek mağazası sınıfında veya API REST’de HTTP girişini doğrulamak için kullanılabilir.
Doğrulama örnekleri, e -posta pazarlama hizmetleri gibi bir veya daha fazla ilgili hizmetle çalışabilecek bir eklentiniz olduğunu düşünün. Bazı yerlerde, belirli hizmetlerin izin verildiğini doğrulamak isteyeceksiniz. Bunu yapmanın en kolay yolu, verilen hizmetlerin bunun gibi bir dizi izin verilen hizmette olup olmadığını kontrol etmektir: if (in_array ($ Service, [‘Mektup Belirti’ ‘,,
‘ConvertKit’,
‘etkilenmiş’
])) {
// iyi!
} Şimdi bu basit çözüm çalışıyor, ancak taşınabilir değil. Tekrar kullanmanız gerekiyorsa, kesip yapıştırmalısınız. Ve sonra hizmet listesi değişirse, her yerde değiştirmeniz gerekir. Bu kötü bir tasarım.
Bunun yerine, bunu yapmak için eklenti boyunca kolayca erişilebilen küçük bir sınıf oluşturalım. Tüm statik yöntemleri kullanarak eklentinin herhangi bir yerinde bu sınıfı çağıran basit olacaktır. İlk yöntem get_services () olarak adlandırılacaktır. Çeşitli hizmetlere sahip olacak ve filtrelerden iade edecek. Şimdi listemizi değiştirmek için bir filtremiz var, ancak geçme konusunda endişelenmenize gerek yok. Sınıf hizmeti {
Genel statik işlev get_services ($ with_labels = false) {
$ Service = Appl_filters (‘slug_get_services’, [
‘Mailchimp’ => ‘mailchimp’,
‘ConvertKit’ => ‘ConvertKit’,
‘Aweber’ => ‘Aweber’
]);
if (false == $ with_labels) {
arka array_keys ($ hizmetler);
}
Dönüş $ Service;
}
} İkinci yöntemimize IS_ALLEGED_Service () denir. Bu bizim gerçek doğrulayıcımız. Hizmetin adını veriyoruz ve hizmetin izin verilip izin verilmediğini kontrol etmek için in_array () kullanıyoruz. Genel statik işlev IS_ALLEGED_Service ($ Service) {
if (is_string ($ servis)) {
return in_array ($ Service, self :: get_services ());
}
yanlış geri;
} Bu. Bu basit bir sınıf, ama bir şey ve bir şey yapmak iyi. Evet, başladığımızdan daha fazla kodumuz var, ancak bu yeni kod taşınabilir ve bakımı kolay. Başka bir hizmet eklemek istiyorsak, listeye ekleyebilir veya filtreleri ve bu sınıf değişikliğinin tüm kullanımlarını kullanabiliriz. Son makalemde seçim için bir forum olarak, veri erişimimizi kontrol etmek için WordPress API üzerinden yangın oluşturma ihtiyacını yazdım.
Bu, kendi veritabanı soyutlamamızı oluşturmak anlamına gelir. Bir seçenekte saklanan veriler için basit bir kapsayıcıya bakalım. Seçenekler için bu tür bir sınıf yapmayı seviyorum çünkü seçeneğin adını tanımlayan bir yer ve nasıl saklandığını ve doğrulandığını. Temel sınıf soyut olarak ilan edilecek ve hepsi statik ilan edilecek beş yöntem ve 1 özelliğe sahip olacak. Mülkiyet seçeneğin adını tanımlar. Bu alt sınıfta değiştirilmelidir. Get ve kaydetme yöntemi, WordPress çekirdeğinden get_option () ve set_option () için bir sarıcıdır. Hemen göreceğimiz sanitasyon ve doğrulama için kullanılacak başka yöntemler de vardır:
Soyut sınıf ayarları {
korumalı statik $ key_option = ”;
Genel statik işlev get () {
return get_option (static :: $ key_option, ”);
}
Genel statik işlevleri kaydedin ($ değer) {
Return update_option (static :: $ key_option, $ değer);}
Halka açık statik işlevi temizleyin ($ değer, $ option, $ Old_Value) {
if ($ option == statik :: $ key_option) {
İf (! Static :: validate ($ değer)) {
Dönüş $ Old_Value;
}
Geri statik :: sendelize ($ değeri);
}
$ Değeri döndür;
}
Korumalı statik işlevi sterilize et ($ değer) {
// alt sınıfa sanitasyon eklemeli
}
Doğrulama ile korunan statik işlev ($ değer) {
// alt sınıfa doğrulama eklemeli
}
} Seçeneğin adı için özelliğin, kendi anahtar kelimeleri yerine statik anahtar kelime kullanılarak yöntemde ele alındığını unutmayın. Bu son statik bağlanmanın bir örneğidir.
Kelime kelimesi, sınıfı genişletirken hiyerarşiyi geçmez. Kendini kullanırsak ve sonra böyle bir sınıf oluşturursak, beklenen sonuçları alamayacağız: API_KEY Sınıfı ayarları genişletir {
korumalı statik $ key_option = ‘_my_api_key’;
} Bunun nedeni, get () çağrıldığında, GET () işlevinin bildirildiği sınıfta $ Key_option özelliği tanımını kullanacaktır. Bu yüzden ana sınıftan boş mülk alacağız. Statik anahtar kelimesini kullanarak PHP’ye geçerli sınıftan özellik değerlerini kullanmasını söyleriz. Statik anahtar kelimesi, son statik bağlanmaya izin verir ve statik olmayan yöntemde bu $ gibi davranır.
Üçüncü yöntem sanitasyon için kullanılacaktır. Sanitasyonu depolama yöntemine koymak çok cazip olurdu, ancak güncellenmiş _option () doğrudan çağrıldığında bizi korumadı. Yapmamalıyız, ancak diğer geliştiricilerin bunu yapmasını engelleyemeyiz. Presave_option filtresini kullanarak, bu seçenekteki tüm depolamanın veritabanı soyutlamamızı kullanıp kullanmadıklarına eşit olmasını sağlıyoruz. Aşağıda, son bölümde oluşturduğumuz doğrulayı kullanan eksiksiz bir örnek: add_filter (‘pre_update_option’, [‘fire_key’, ‘temiz’], 10, 3); api_key sınıf genişleyen ayarlar {
korumalı statik $ key_option = ‘_my_api_keys’;
Doğrulama ile korunan statik işlev ($ değer) {
if (is_array ($ değer)) {
foreach ($ value $ Service => $ tuş) {
İf (! Services :: is_allowed_service ($ servis)) {
yanlış geri;
}
}
}
sağa dön;
}
Korumalı statik işlevi sterilize et ($ değer) {
if (is_array ($ değer)) {
foreach ($ value $ Service => $ tuş) {
if (hizmetler :: is_allowed_service ($ servis) && is_string ($ anahtar)) {
$ değer [$ Service] = strip_tags ($ tuş);
} değilse {
ayarlanmamış ($ değer [$ hizmet]);
}
}
}
$ Değeri döndür;
}
} Bu konuda sevdiğim şey, küresel olarak mevcut olan ve küresel olarak geçerli olan bir veritabanı soyutlamamız olması. Ve süreçte bir küresel veya bekar kullanmıyoruz.
Bazı insanlar bu sınıfı görebilir ve Get () yöntemini her çağırdığınızda get_option () çağırması gerektiğinden ve bunun verimsiz göründüğünden endişe edebilir. Bir çözüm, verileri mülk üzerinde saklamaktır. WordPress nesne önbelleği için aşırı olduğu için bu gerekli değildir. Büyük olasılıkla, otomatik yükleyici seçeneği sorulduğunda opsiyon değeriniz nesne önbelleğine yerleştirilmiştir. Bu seçeneğe ilk kez adlandırılmıyorsa, oraya yerleştirilecektir. Bu, aynı türden birkaç sürümüne sahip verilerle çalışırken bu tür kalıpları kullanmayacağım bir yaklaşımdır. Örneğin, bir e -ticaret sisteminiz varsa, kullandığınız her sipariş için bir nesne örneği oluşturmak istersiniz. Bunu bu serinin bir sonraki makalesinde tartışacağım. Statik sınıf, verilerin yalnızca bir örneğinin olduğu veriler için çok iyi. Bir yandan, tek bir desen kullanan, ancak daha basit sınıflar gibidirler. Umarım bu basit örneği yararlı bulursunuz. Bir sonraki makalemde, bu yaklaşımın zayıf yönleri hakkında konuşacağım ve soruna alternatif çözümler sunacağım. En iyi seçim, elbette, her zaman ihtiyaçlarınıza bağlıdır.