Geçenlerde şirketimizin CMS ikinci versiyonu için hazırlık benim çerçeve yenilemiştir. Normal nesnelerle onları değiştirmek için ben statik yapılan şeylerin I undid büyük bir miktardır. Bunu yaparken, bana geçiyor ve çekirdek dosyaların içine hack güvenmek için kullanılan bir esneklik büyük miktarda yarattı. Tek alternatif sadece düşük seviyeli çekirdek işlevselliği ile ilgili küresel işlevler olduğunda ben şimdi sadece statik yapıları kullanın.
Benim bootstrap.php dosyasının birkaç satır göstermek için gidiyorum (benim isteklerin tümünü bu dosyanın yoluyla gönderilen olsun, ama her dosyanın en başında dahil ederek aynı sonucu elde edebilirsiniz) ne demek istediğimi göstermek için. Bu muhtemelen durumda kullanmak istiyorum ne bir oldukça ağır versiyonu, ama umarım fikir yararlıdır. (Bu, tüm hafifçe modifiye edilmiştir.)
//bootstrap.php
...
// CONSTRUCT APPLICATION
{
$Database = new Databases\Mysql(
Constant::get('DATABASE_HOST'),
Constant::get('DATABASE_USER'),
Constant::get('DATABASE_PASSWORD'),
Constant::get('DATABASE_SCHEMA')
);
$Registry = new Collections\Registry;
$Loader = new Loaders\Base;
$Debugger = new Debuggers\Dummy; // Debuggers\Console to log debugging info to JavaScript console
$Application = new Applications\Base($Database, $Registry, $Loader, $Debugger);
}
...
Gördüğünüz gibi, ben bu "küresel" ihtiyaçlar için onlara erişimi vermek için diğer nesnelere yapıcı bir argüman olarak sağlanan olabilir benim uygulama nesnesi oluşturmak için seçenekler her türlü var.
Veritabanı nesne kendi kendini açıklayıcı. Kayıt nesne başka bir yerde uygulamada ulaşmak isteyebilirsiniz nesne için bir kap gibi davranır. Yükleyici şablon dosyaları gibi diğer kaynaklara yükleme için bir yardımcı olarak görür. Ve ayıklayıcı çıkış işlemek için vardır.
Örneğin ben, ben örneğini veritabanı sınıfı değiştirebilir ve, işte ben bir SQLite veritabanı için bir bağlantı var. (Belirtildiği gibi) debugger'ın sınıfını değiştirebilir ve şimdi benim hata ayıklama tüm bilgi benim JavaScript konsoluna kaydedilir.
Tamam, şimdi konuya geri. Nasıl diğer nesneleri tüm bu erişim veriyorsunuz? Sadece yapıcı bir argüman geçmek.
// still bootstrap.php
...
// DISPATCH APPLICATION
{
$Router = new Routers\Http($Application);
$Router->routeUri($_SERVER['REQUEST_URI']);
}
...
Sadece benim Router (veya ne olursa olsun nesne onunla inşa), çok daha esnek olduğunu, ancak. Şimdi ben sadece farklı benim uygulama nesne örneğini, ve benim Router farklı buna göre davranacaktır.