WordPress geliştiricileri için temel PHP tasarım desenleri

Yazılım geliştirme, yinelenen kodu özetlemek için bir işlev kullanarak kendinizi akıllıca tekrarlamakla ilgilidir, bu nedenle her seferinde yazmayı rahatsız etmeniz gerekmez. Bu sadece tekrarlanabilecek ve takip edilebilecek kalıpları bulmak değil, aynı zamanda doğru deseni bulmak da önemlidir. PHP tasarım deseni devreye giriyor. Bunu sık sık işlev veya sınıf yazmayı veya kütüphaneleri içe aktarmayı seçmek açısından düşünsek de, bu yaklaşım uygulama mimarisine de uzanır. Mimarlık çerçevesi, CMS, eklentiler, temalar, sınıf veya sistemler genellikle desenlere uygun olarak tanımlanır.
PHP Classic yazılımının tasarım kalıplarını ve mimarisini ve WordPress’te kullanılan genel desenin gerçekleştirilmesi, daha iyi kod yazmamıza yardımcı olmada çok rol oynayabilir. Etkinlikler tarafından teşvik edilir. WordPress Model Ekran Denetleyicisi, çekirdek ve eklenti yazılımındaki kancaların yanı sıra olay olarak hareket eden temaların olduğu olaylar tarafından yönlendirilen mimariyi kullanır. WordPress bir kanca bulduğunda, etkinliğe “ilgili” tüm kodu yürüttü. Bu, add_filter () veya add_action () ile “abone olabilen” Abone olabilen WordPress veya eklenti veya tema “yayın” etkinliklerini “yayınlayabilir” etkinliklerine göre gevşektir.
JavaScript benzer bir yaklaşım kullanarak bir tarayıcıda çalışır. JavaScript’te, Window.onload () gibi sayfa yüklemesi ile tetiklenen veya tıklama olayları gibi tarayıcılarla kullanıcı etkileşimlerine dayanan bazı olaylara bir olay listesi ekliyoruz. WordPress ve JavaScript tarafından tarayıcıda kullanılan etkinlik tabanlı mimari oldukça doğrusaldır, bu da anlaşılmasını kolaylaştırır. Bu, “Bu olduğunda bunları yapın” olarak özetlenebilir. Model Görünüm Denetleyicisi (MVC) modelinin anlaşılması kolay değildir, çünkü kullanıcı ve uygulama arasındaki gerçek zamanlı dairesel ilişkiyi gösterir. MVC modelinde birçok varyasyon vardır, ancak genel olarak üç parça vardır: ekran, denetleyici ve model. Bir ekran veya şablon, mevcut model durumuna göre verilerin görsel gösterimini tanımlar ve kullanıcı girişine göre değişebilir.
Denetleyici, ekran ile verilerin kaynağı veya uzun mesafeli bir API arasında bir aracıdır. Ayrıca modeli uzun mesafeli bir ekran ve ateşle etkileşiminize göre günceller.
Model, bugün kontrolör tarafından belirlenen ve ekran tarafından görüntülenen bir veri koleksiyonudur.
Genel olarak, MVC mimarisini kullanan uygulamalar, çerçeveler veya dilleri anlamak, olaylar tarafından yönlendirilen mimariyi kullananlardan daha zordur. Hiçbir şey “daha iyi” veya “daha güçlü” değildir, ancak her ikisi de farklı ve farklı kullanımlar için uygundur.
WordPress’te MVC desenini uygulayan birkaç çerçeve vardır. Bu, özel ihtiyaçlara uygun olduklarında iyidir, ancak olayların yönlendirdiği mimarinin üzerinde MVC’ler olduklarını hatırlamak önemlidir. WordPress olay güdümlü mimari için yararlı olan PHP tasarım modelleri yazılım desenleri değildir. Ancak gözlemci modelinin bir yayıncı/müşteri varyantı kullanılarak uygulanır. Bu her zaman desenlerle ilgili ders kitaplarının tanımıyla eşleşmez, ancak aslında sorun yoktur. PHP tasarım kalıplarını öğrenmek veya kullanmak, bu bilginin konusu veya uygulanması hakkındaki etkileyici bilginiz için baskı noktaları hakkında değil. Tersine, bu kalıpları anlamak, bunları doğru zamanda kullanmanıza yardımcı olmak ve bunun bir sorun için doğru çözüm olup olmadığını bilmekle ilgilidir. Bu aynı zamanda, diğer insanların kodlarını okumaya yardımcı olur, bu da becerilerinizi geliştirmek ve entegre etmenize yardımcı olmak için önemlidir. veya debugnya. Genel olarak gördüğünüz kodu anlamanıza yardımcı olan PHP tasarım kalıplarını belirleme. Tüm yazılım tasarım kalıplarını tartışmayacağım. Bunun yerine, WordPress geliştiricileri için iki önemli resmi desen görmek istiyorum. Ayrıca bazı gayri resmi kalıplar hakkında konuşmak istiyorum, ancak WordPress’te yaygın olarak kullanılıyor. Tek tek desen, yazılımın geliştirilmesinde ve WordPress eklentilerinin geliştirilmesinde çok yaygındır – ancak WordPress eklentilerinin geliştirilmesinde aşırı kullanılabilir.
Sington modelinin çekirdeği, sınıftan onu uygulayan sadece bir örnek olmasını sağlamaktır. PHP’de, varsayılan olarak, herhangi bir sınıf birkaç kez kullanılabilir. Çoğu için bu iyidir, çünkü farklı verileri temsil eden aynı yapıya sahip birçok nesne oluşturmak için sınıf kullanmak mümkündür. Peki ya eklentileri veya uygulamaları yüklemek için tasarlanmış sınıf? Neden iki kez yürümesini istiyorsun? Bu sınıftan sadece bir örnek isteyebilirsiniz. Ya da eklentileri veya uygulama yapılandırmalarını depolayan nesneler oluşturan sınıfa ne dersiniz? Bir kez daha, sınıfın sadece bir örneği mantıklıdır. Sadece bir sınıf örneğine ihtiyacınız var, isim. Singleton, bir sınıf yapıcısını özel veya korunan olarak ilan ederek çalışır. Bu modelde, sınıf örneklerini karşılamak için özel veya korunan statik değişkenler kullanılır. Daha sonra bu değişkeni almak için genel statik yöntemi kullanılır. Bunu yapmadan önce, değişkenin sıfır olup olmadığını kontrol etti ve eğer öyleyse, bir sınıf örneği yaptı ve örneği bu değişkene kaydeddi. İşte bir örnek: <? Php
Singleton_example class {
/**
* Sınıf örnekleri tutar
*
* @Personal erişim
*
* @var singleton_example
*/
Kişisel statik $ örneği;
/**
* Yeni örnekleri önlemek için kişisel yapıcı.
*/
Kişisel işlev __Construct () {
// Burada olması gereken şeyler yapmaktan çekinmeyin.
}
/**
* Sınıf örnekleri alın
*
* @return singleton_example
*/
Genel statik işlev get_instance () {
if (null === self :: $ örnek) {
Self :: $ örnek = yeni self ();
}
Kendinize dönün :: $ örneği;
}
} Kişisel yapıcı nedeniyle, bu sınıfa şuna benzer yeni bir anahtar kelime kullanarak erişemezsiniz: $ object = new singleton_example (); Bu, PHP'nin kişisel, yasadışı yöntemi çağırmasına neden olacaktır. Bunun yerine, get_instance () yöntemini kullanarak bir örnek alacaksınız: $ object = singleton_example :: get_instance (); Şimdi $ nesne değişkeni sınıf örnekleri içerir ve bunu sınıfın statik olmayan yöntemini çağırmak için kullanabilirsiniz. Yukarıdaki örnek WordPress için oldukça tipiktir, çünkü Php 5.2'yi destekler. Bazı durumlarda, tek bir desen uygulayan bir sınıf alt sınıfı yapmak isteyebilirsiniz. Bunu yapmak istediğiniz pek çok durumda değil, ancak son statik bağlanmayı kullanabilirsiniz:
<? Php
Singleton_example_two class {
/**
* Sınıf örnekleri tutar
*
* @Access korumalı
*
* @var singleton_example_two
*/
$ korumalı statik örnek;
/**
* Yeni örnekleri önlemek için korunan yapıcı.
*/
Korumalı işlev __Construct () {
// Burada olması gereken şeyler yapmaktan çekinmeyin.
}
/**
* Sınıf örnekleri alın
*
* @return singleton_example
*/
Genel statik işlev get_instance () {
if (null === statik :: $ örnek) {
statik :: $ örnek = new static ();
}
geri statik :: $ örnek;
}
} Bu örnek benzerdir, ancak korunan bir anlık değişken kullanır. Ayrıca, PHP'nin alt sınıflar yürütülürken ana örneği değil, geçerli örneği ifade etmesini sağlamak için statik anahtar kelimesi ile değiştirir.
Single'ın birçok zayıflığı olduğunu ve WordPress'te çok sık kullanıldığını unutmayın. Bu onları kötü yapmaz, ama dikkatli olun. Singleton genellikle eklentileri yüklemekten sorumlu eklenti sınıfı için mantıklıdır. Eklentiniz bir sınıf örneğine ihtiyaç duyabilir, ancak diğerleri eklentinizle entegre olur veya eklentiniz için eklenti kendi örneğini gerektirebilir. Genellikle, WordPress eklentisi, mülk olarak diğer birçok sınıftan türevleri ekleyen bir sınıfa sahip bir ana sınıfa sahiptir. Bu, belirli sınıflardan belirli örneklere kolay erişimin avantajlarından yararlanırken, birçok bekardan kaçınmalarını sağlar. Single'ın kötüye kullanıldığı bir başka durum da, birkaç kez kullanılacak işlevsel nedeni olmayan bir sınıftır, ancak bunu yapmanın hiçbir zararı yoktur. Genellikle, bu gerçekten veri nesnelerini temsil etmeyen, ancak ilgili işlevlerin bir koleksiyonudur. Bu sınıfların tüm yöntemlerini ilan etmek birçok şeyi önemli ölçüde basitleştirebilir. Fabrika Desenleri Fabrika kalıpları WordPress'te yaygın olarak kullanılmamaktadır, ancak birçok ayrı sınıfı açıklayan karmaşık sistemler yaptıkları için anlaşılması gerekir. Fabrika kalıplarını uygulayan sınıflar, diğer sınıflardan nesneler veya nesneler oluşturmak için tasarlanmıştır. Bu yüzden buna fabrika diyoruz, başka bir nesne yarattı. Aşağıda, nasıl çalıştığını gösteren bir fabrika örneğinin basit bir örneğidir. Bu temel fabrika, çeşitli yollarla bir wp_post sınıfı örneği oluşturmak için kullanılır: Post -pabrik sınıfı {/**
* @var wp_post
*/
Korumalı $ gönderi;

Genel işlev __Construct ($ post = null) {
if (is_a ($ post, ‘wp_post’))) {
$ this-> post = $ post;} elseif (is_numeric ($ post) || IS_A ($ post, ‘stdclass’) {
$ _Posting = get_post ($ post);
if (is_object ($ _post)) {
$ this-> posta = $ _post;
}
} değilse {
$ this-> post = get_post ();
}
}
Genel işlev get_post () {
Dönüş $ this-> gönderi;
}
} Bu çok basit bir örnektir ve belki de bir değişkenin gerçekten wp_post sağlamak için çok karmaşık bir yoldur. Bu, WP_POST nesneleri, post veya wp_qury bağımsız değişkeni sağlanırken, WP_POST nesnesini gerçekten güvenli bir şekilde temsil ederken, tüm yerlerde doğrulama kodunu tekrarlamalıdır. Bir kez daha, bu gerçekten yararlı olmak için çok basit ve fabrika deseninin olumsuz tarafını gösteriyor. Orantılı olmayabilecek ekstra ek yük. Bununla birlikte, bu örnekte olduğu gibi, bu orantılı olabilecek giriş validasyonunu tanıtmak için kullanılabilir. Carl Alexander, böyle fabrikaları düşünürken okumaya değer WordPress yayınlarını yönetmek için bir sınıf tasarlama konusunda çok iyi bir makalesi var. Ancak, orantılı olabileceği birçok durum vardır ve uygulamanın birçok parçasını bir yapılandırmadan yapan bir sistem oluşturmanın iyi bir yoludur. Örneğin, yangın dinlenmesinin bitiş noktasını veya bir rota koleksiyonunu eklediğimizde, genellikle son nokta olan rotayı ele alan sınıftaki bitiş noktası için alanı tanımlarız. Peki ya başka yerlerde yapılandırmaya ihtiyacımız olursa? Yapılandırmayı son nokta jeneratörüne ve diğer jeneratörlere enjekte etmek istiyorsak ne olur?
İşte o zaman başka bir fabrika veya fabrika kullanacağız. Kısa süre önce fabrika desenini uygulayan son tesis WordPress API’sının bir jeneratörü verdim. Kendim yararlı olmasına rağmen, aynı yapılandırmayı kullanmak için kütüphane üzerinde de çalışıyorum, ancak bitiş noktasını kullanan omurga tarafından üretilen arayüzü yapacağım. Yapılandırma koda gevşek bir şekilde bağlı olduğundan, UI’yi açısal olarak üretmeye uyum sağlamayı ve ayrıca tamamlandıktan sonra FIRDS API’sının özelliklerini benimsemesini umuyorum. Fabrikanın yararlı olabileceği başka bir yer eklenti kız kardeşidir. Genellikle eklenti, aynı kancayı kullanan ve tekrarlanan birçok kod kullanan benzer bir denemeye sahiptir. Fabrika desenlerinin kullanımlarından biri, tüm kancaları otomatik olarak ayarlamaktır. WordPress Core Globals Tek bir PHP tasarım deseni kullanmanın nedenlerinden biri, sınıf örneklerini depolamak için global değişkenleri kullanmanın gerekliliğinden kaçınmaktır. Singleton, küresel bir değişken kullanmadan uygulamaya küresel bir durum sunar. Global PHP değişkeni gerçekten değişebilir. Hiçbir zaman ayarlanamaz veya yeniden tanımlanamazlar. Hepimiz WordPress’teki Global Değişken $ Post’u bir diziye asla değiştirmemeyi kabul ediyoruz, ancak yapabiliriz. Global $ gönderisini rastgele diziye değiştirmek veya Post_title özelliğini silme konusunda yasadışı bir şey yoktur. Bir dahaki sefere erişildiğinde, sorun ortaya çıkacak, belki de ölümcül bir hata olarak. Çekirdek WordPress tek kullanmaz. Kesinlikle söyleyemem, ancak olasılık WordPress Artifact ve statik özellik PHP’de tanıtılmadan önce ortaya çıkan selefi B2/Cafelog’dur.
Tersine, WordPress birçok sınıf örneğini küresel değişkenlere yerleştirir. Bu sınıflar bir kamu kurucusuna sahip olma eğilimindedir. Depolanan yeniden yazma kuralları ile yakından ilgili olan WP_REWRITE durumunda, WP_REWRITE örneğini $ wp_rewrite’dakiler dışında istediğiniz bir olasılık olmayabilir. WordPress bugün yazılırsa, wp_rewrite tek bir desen uygulayabilir. Daha fazla: global $ wp_rewrite; $ wp_rewrite-> flush_rules (); Kullanabiliriz: wp_rewrite :: get_instance ()-> flush_rules (); Ancak, aşırı tek PHP tasarım desenlerinin kullanımı olabilir, tek bir ana WordPress sınıfı olabilir ve bir WP_REWRITE, WPDB, WP_REST_SERVER örneği, vb. $ WP_REWRITE Global, bir proje on yaşından büyük olduğunda ve hasar vermemeye kararlı olan saf bir teknik borçtur. Ve net olmama izin verin, bence daha “teknik olarak” olmak için, hemen hemen her WordPress sitesinde ihlal edilmeye layık değil. “Ana Örnekler” olan sınıflar için WordPress’te küresel kullanım

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir