Özel çerçevem için geliştirdiğim olay sistemi hakkında bir fikrim var.Bir işlevde PHP ile genişleterek bazı satırları ekleyebilir miyiz?
Böyle bir işlevi düşünün.
class Test
{
public function hi()
{
Event::add(__FUNCTION__ . 'is about to run.');
return "hi";
}
}
Bazı işlevler için aynısını yapmanız gerektiğini düşünün. (Belki de, hangi işlevlerin çalışma zamanında çalıştırıldığını ve ayrı bir dosyada oturum açmak istediğini kaydedebilirsiniz.)
Bunu yapmak ve Olayları işlevlere el ile eklemek yerine, bunun gibi bir şey yapabilir miyiz?
class Test
{
public function hi()
{
return "hi";
}
}
// events.php (It's a pseudo code so may not work.)
// Imagine extend's purpose is to inject codes into target function
Event::bind('on', $className, $methodName, function() use ($className, $methodName)
{
return $className->$methodName->extend('before', Event::add(__FUNCTION__ . 'is about to run.'));
});
fikri Test class
içindedir ve dışarıda tarafından extend
işlevinde geçmesi her ne enjekte hi()
fonksiyonunu enjekte etmektir. 'before'
, enjeksiyonun hedef fonksiyonun ilk satırında olması gerektiği anlamına gelir.
Son olarak, olaylar ve olay bağlamaları işlevlerden tamamen soyut olarak tutulur. Fonksiyonları değiştirmeden özel şeyleri bağlayabilmek istiyorum.
Bunu, eval()
ile uğraşarak veya call_user_func()
ile arayarak bunu yapabileceğimizi hissediyorum. Yine de emin değilim. eval()
'u kullanmak zaten çok kötü görünüyor.
Soruma;
- PHP ile yapılabilecek bir şey var mı?
- OOP/OOP Prensiplerinde bir ismi var mı?
- Herhangi bir anlam ifade ediyor mu, yoksa kötü bir fikir mi?
Sınıfları kullanmanın bütün amacı onları tekrar kullanmaktı? –
Emin değilim. Bir vekil belki? –
[Bağımlılık Enjeksiyonu] (http://en.wikipedia.org/wiki/Dependency_injection)? Tasarım kalıpları söz konusu olduğunda Fowler her zaman iyi bir kaynaktır. http://www.martinfowler.com/articles/injection.html. ** Değerlendirmekten kaçının **. – ficuscr