Kısa süre önce şirketimin CMS'sinin ikinci sürümüne hazırlanırken çerçevemi yeniledim. Ben bunları normal nesnelerle değiştirmek için statik yaptığım şeylerin büyük bir kısmını undid. Bunu yaparken, bana giden ve çekirdek dosyalara korsanlık etmemde kullanılan büyük bir esneklik yarattım. Şimdi sadece tek seçenek, sadece düşük seviyeli çekirdek işlevselliği ile ilgili olan global fonksiyon olduğunda statik yapıları kullanıyorum.
Bootstrap.php dosyasımın birkaç satırını göstereceğim (tüm isteklerim bu dosyadan gönderilir, ancak her bir dosyanın üstüne ekleyerek aynı sonucu elde edebilirsiniz) size göstermek için demek istedigim. Bu, muhtemelen sizin durumunuzda kullanacağınız şeylerin oldukça ağır bir versiyonudur, ama umarım bu fikir faydalıdır. (Bu biraz değiştirildi.) Gördüğünüz gibi, ben onları bu "küresel" ihtiyaçlar için erişim vermek diğer nesnelere yapıcı bir argüman olarak verilen edebilirsiniz başvurum nesnesini oluşturmak için seçenekler her türlü var
//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);
}
...
.
Veritabanı nesnesi kendiliğinden açıklayıcıdır. Kayıt nesnesi, uygulamada başka bir yere erişmek isteyebileceğim nesne için bir kapsayıcı görevi görür. Yükleyici, şablon dosyaları gibi diğer kaynakları yüklemek için bir yardımcı program görevi görür. Ve hata ayıklayıcı, hata ayıklama çıktısını işlemek için var.
Örneğin, başlattığım veritabanı sınıfını değiştirebilirim ve bir SQLite veritabanıyla bağlantım var. Hata ayıklayıcının sınıfını değiştirebilirim (belirtildiği gibi) ve şimdi tüm hata ayıklama bilgilerim JavaScript konsoluma kaydedilecek.
Şimdi soruna dönelim. Tüm bunlara erişim için başka nesneler nasıl veriyorsunuz? Bunu sadece yapıcıya bir argümanla iletirsiniz.
// still bootstrap.php
...
// DISPATCH APPLICATION
{
$Router = new Routers\Http($Application);
$Router->routeUri($_SERVER['REQUEST_URI']);
}
...
Sadece bu değil, aynı zamanda Yönlendiricim (veya onunla oluşturduğum herhangi bir nesne) de daha esnektir. Şimdi uygulama nesnesini farklı bir şekilde örneklendirebilirim ve Yönlendiricim buna göre farklı davranacaktır.
Merhaba, cevabınız için teşekkürler, değişkenleri statik sınıflara kaydetmek mümkündür. Örneğin, kullanıcının giriş yapıp yapmadığını kontrol etmek için işlev çağırın ve sonra bu değişkeni sayfaya birkaç kez daha sonra erişebilirsiniz. –
Evet, statik bir sınıf için, $ class değişkenini bildirmek için yaptığım şeyi aynen yapın. Tek şey, kullandığınız her değişkeni bildirmenizdir. –
Ancak, size verdiğim kod düzenli olarak düzenli bir sınıf kullanmanıza izin veriyor. Statik kısım, sadece onu globalleştirmek yerine size sınıf sağlar. Biraz daha göstermek için düzenleyeceğim. –