Hayır, sınıfı doğrudan değil bir kanca ile 'başlatamazsınız' veya başlatamazsınız. Bazı ek kodlar her zaman gereklidir (ve kendiniz için bir solucan kutusu açarken bunu yapabilmek için arzu edilen bir şey değildir.
İşte bunu yapmanın daha iyi bir yolu:
class MyClass {
function __construct() {
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
function getStuffDone() {
// .. This is where stuff gets done ..
}
}
$var = new MyClass();
Tabii ki, genel durum için daha da basitleştirmek için bir arayüz sınıfı oluşturabiliriz:
class IGetStuffDone {
function IGetStuffDone(){
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
public abstract function getStuffDone();
}
Arabirim olarak, doğrudan bu türde bir nesne oluşturamayacağınızı, ancak şunu söyleyebilmenizi sağlayan bir alt sınıf oluşturabileceğinizi unutmayın:
class CDoingThings extends IGetStuffDone {
function getStuffDone(){
// doing things
}
}
$var = new CDoingThings();
Hangisi otomatik olarak tüm kancaları ekleyecektir, sadece bir alt sınıfta tam olarak ne yapıldığını tanımlamanız ve onu yaratmanız yeterlidir!
İnşaatçılar Üzerine
Bir yapıcıyı bir kanca işlevi olarak eklemem, kötü bir uygulama ve pek çok olağandışı olaya yol açabilir. Ayrıca çoğu dilde bir yapıcı başlatılmakta olan nesneyi döndürür, böylece kancanız bir filtrede olduğu gibi bir şey döndürmek zorunda kalırsa, istediğiniz gibi süzülmüş değişkeni döndürmez, ancak bunun yerine sınıf nesnesini döndürür.
Yapıcı veya yıkıcı olarak adlandırmak, hangi dilde olursanız olun, asla yapılmamalı , çok, çok, çok kötü bir programlama pratiğidir .
Yapıcılar, fiili çalışmalar için değil, kullanıma hazır hale getirilmeleri için nesneler inşa etmelidir. Nesne tarafından yapılacak iş ayrı bir fonksiyonda olmalıdır.
Statik sınıf yöntemleri ve başlatılması / başlatılması gerekmiyor
Sınıf yönteminiz statik bir sınıf yöntemse, sınıfın adını $this
aşağıda gösterildiği yerine tırnak işaretleri içinde iletebilirsiniz :
class MyClass {
public static function getStuffDone() {
// .. This is where stuff gets done ..
}
}
add_action( 'admin_init', array('MyClass','getStuffDone' ) );
Kapanışlar ve PHP 5.3
Ne yazık ki yeni sınıfı oluşturan çizgiden kaçınamazsınız. Bunu atlamanın diğer tek çözümü, hala bu çizgiye sahip olan kazan plakası kodunu içerecek ve PHP 5.3+ gerektiren, örneğin:
add_action('admin_init',function(){
$var = new MyClass();
$var->getStuffDone();
});
Hangi noktada sınıfı geçebilir ve sadece bir işlev kullanabilirsiniz:
add_action('admin_init',function(){
// do stuff
});
Ancak, adsız fonksiyonların hayaletini tanıttığınızı unutmayın. Yukarıdaki eylemi kullanarak kaldırmanın bir yolu yoktur remove_action
ve bu, diğer halkların yasalarıyla çalışmak zorunda olan geliştiriciler için büyük acı ve acı yaratır.
Üzerinde Ve İşaretleri
Bunun gibi kullanılan eylemleri görebilirsiniz:
array( &$this, 'getStuffDone' );
Bu kötü . &
nesneler referans olarak değil, değerler olarak iletildiğinde PHP 4'te geri eklendi. PHP 4, on yıldan daha eskidir ve WordPress tarafından uzun süredir desteklenmemektedir.
Orada hiçbir sebep kullanmak &this
kancalar ve filtreler ekleyerek ve hiçbir sorunlara neden olacaktır başvuru kaldırma ve hatta PHP gelecekteki sürümlerinde uyumluluğu iyileştirebilir zaman
Bunun yerine bunu kullanın:
array( $this, 'getStuffDone' );