2010-12-07 21 views
6

Bir PHP uygulamasında
numaralı çengelleri ele almanın en iyi yolunun ne olduğunu merak ediyorum - böylece kodun ana gövdesini değiştirmeden özel veya 'eklenti' işlevselliğini ekleyebilirim.PHP kancaları yapmanın en iyi yolu

Wordpress'in bu gibi özelliklere sahip olduğunu biliyorum. ...

if (file_exists('file_before'){ include('file_before'); } 

print 'hello'; 

if (file_exists('file_after'){ include('file_after'); } 
+2

Beklediğiniz "kanca" hakkında daha fazla bilgiye mi ihtiyacınız var? Yukarıdaki ** mantık ** mükemmel çalışıyor – ajreal

+8

Bu kod mükemmel çalışmıyor, iki kapanış köşeli ayraç eksik – Ashley

+1

Sadece ne yapmaya çalıştığım hakkında bir fikir vermek için pseudocode oldu – CJD

cevap

17

Genellikle kancalar söz konusu olduğunda iki tip kanca, PRE ve POST depolayacak bir HookLoader sınıfı oluşturulduğunda işler nasıl yapılır? PHP olarak tek bir iş parçacığı tercüman olduğu için DURING diye bir şey yoktur. Kanca dizindeki her kanca şöyle isim olmalıdır

$Hooks = new HookLoader(); 

$Hook->Run("PRE","database_connect"); 
$Database->Connect(); 
$Hook->Run("POST","database_connect"); 

:

name_pre_database_connect.hook.php 

Kanca dosyaları şöyle biçimlendirilmiş olması:

{name}_{type}_{event}.hook.php 

Bu

bu örnek alın sınırsız miktarda kanca oluşturmanıza izin verecektir. onlar "Observer Pattern kullanmayın Neden Hook::run("type","event");

+0

Teşekkürler, iyi bir çözüm – CJD

+0

Hoş geldiniz, umarım her şey iyi gider. – RobertPitt

0

MediaWiki kendi yöntemleri kanca tanımlamanın kendi mekanizmaya sahiptir ve işlevlerini kayıt yolları yürütme belirli bir nokta için yürütülecek

: şöyle gerçekten yolunda bir şeyler yapmak mı

http://www.mediawiki.org/wiki/Hooks (başlamak için iyi bir yer olabilir)

5

sahip olarak

tercihen i sürece entegre edilecek bu sadece gerçek nesnenin içinde kanca çağrıları çalıştırmak nedenle yeni kütüphaneler ekleyerek yapabilirsiniz, kanca sınıfı soyut ve statik yapacak " bunun için? Vücudunuza bir Nesne ekleyebilir ve ekli sınıflanmış bekletme eylemlerini tetikleyebilirsiniz. Düzeltmek isterseniz, her bir Observer nesnesinin içinde, yürütme aşamasını tanımlayan belirli bir yöntem oluşturabilirsiniz. Bu, öncelikle daha fazla programlama olacaktır, ancak sınıflarınıza daha fazla işlevselliği eklemek için çok temiz bir arayüz sağlar.

Somut bir inceleme örneği için, bu IBM dev article (bir bütün olarak okumaya değer), bu desen hakkında güzel bir izlenim bırakmalıdır.