मैंने हाल ही में हमारी कंपनी के सीएमएस के दूसरे संस्करण की तैयारी में अपने ढांचे को फिर से बदल दिया। I undid सामान्य वस्तुओं के साथ उन्हें बदलने के लिए मैंने जो चीजें बनाई हैं, उनमें से एक बड़ी मात्रा में स्थिर है। ऐसा करने में, मैंने बड़ी मात्रा में लचीलापन बनाया जो मुझे कोर फाइलों में जाकर और हैकिंग पर भरोसा करता था। अब मैं केवल स्थिर संरचनाओं का उपयोग करता हूं जब एकमात्र विकल्प वैश्विक कार्य होता है, जो केवल निम्न-स्तरीय कोर कार्यक्षमता से संबंधित होता है।
मैं अपनी बूटस्ट्रैप.एफ़.पी.पी. फ़ाइल की कुछ पंक्तियां दिखाने जा रहा हूं (मेरे सभी अनुरोध उस फ़ाइल के माध्यम से भेजे जाते हैं, लेकिन आप इसे दिखाने के लिए इसे प्रत्येक फ़ाइल के शीर्ष पर शामिल करके उसी परिणाम को प्राप्त कर सकते हैं) मेरा मतलब। यह एक बहुत ही भारी संस्करण है जिसका आप शायद अपनी स्थिति में उपयोग करेंगे, लेकिन उम्मीद है कि विचार उपयोगी है। (यह सब थोड़ा संशोधित है।)
//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);
}
...
आप देख सकते हैं, मैं अपने आवेदन वस्तु है, जो मैं अन्य वस्तुओं के निर्माता में एक तर्क उन्हें इन "वैश्विक" जरूरतों को पहुँच प्रदान करने के रूप में प्रदान की कर सकते हैं बनाने के लिए विकल्पों में से सभी प्रकार की है।
डेटाबेस ऑब्जेक्ट स्वयं स्पष्टीकरणपूर्ण है। रजिस्ट्री ऑब्जेक्ट ऑब्जेक्ट के लिए कंटेनर के रूप में कार्य करता है, मैं एप्लिकेशन में कहीं और एक्सेस करना चाहता हूं। लोडर टेम्पलेट फ़ाइलों जैसे अन्य संसाधनों को लोड करने के लिए उपयोगिता के रूप में कार्य करता है। और डीबग आउटपुट को संभालने के लिए डीबगर है।
उदाहरण के लिए, मैं डेटाबेस क्लास को बदल सकता हूं जिसे मैं तुरंत चालू करता हूं और, voila मेरे पास SQLite डेटाबेस से कनेक्शन है। मैं डीबगर की श्रेणी बदल सकता हूं (जैसा कि नोट किया गया है) और अब मेरी सभी डीबग जानकारी मेरे जावास्क्रिप्ट कंसोल पर लॉग इन की जाएगी।
ठीक है, अब इस मुद्दे पर वापस जाएं। आप अन्य वस्तुओं को इस सब तक कैसे पहुंच सकते हैं? आप बस इसे कन्स्ट्रक्टर के लिए एक तर्क में पास करते हैं।
// still bootstrap.php
...
// DISPATCH APPLICATION
{
$Router = new Routers\Http($Application);
$Router->routeUri($_SERVER['REQUEST_URI']);
}
...
इतना ही नहीं, लेकिन मेरा राउटर (या जो भी वस्तु मैं इसके साथ बना रहा हूं) भी अधिक लचीला है। अब मैं अपने आवेदन ऑब्जेक्ट को अलग-अलग कर सकता हूं, और मेरा राउटर तदनुसार अलग-अलग व्यवहार करेगा।
हाय, आपके उत्तर के लिए धन्यवाद, क्या स्थिर वर्गों में चर को सहेजना संभव है। यानी कॉल फ़ंक्शन यह जांचने के लिए कि उपयोगकर्ता लॉग इन है या नहीं, और उसके बाद पेज में कई बार इस चर का उपयोग करें? –
हां, एक स्थैतिक वर्ग के लिए वही काम करते हैं जो मैंने परिवर्तनीय $ वर्ग घोषित करने के लिए किया था। केवल एक चीज यह है कि आपके द्वारा उपयोग किए जाने वाले प्रत्येक चर को घोषित करने के लिए आपके पास है। –
लेकिन, मैंने जो कोड दिया है, वह आपको नियमित रूप से नियमित रूप से नियमित कक्षा का उपयोग करने की अनुमति देता है। स्थैतिक भाग आपको इसे वैश्विक बनाने की बजाए कक्षा देता है। मैं थोड़ा और दिखाने के लिए संपादित करेंगे। –