Sayt bo'limlari
Muharrir tanlovi:
- Sanoat boshqaruv tizimlarida ma'lumotlarni uzatish tarmoqlari Quyi tizimni markazlashmagan so'rov jarayoni
- Boshqarish ob'ektlarini parametrik identifikatsiyalash usullari
- Elektr quvvat tizimlarini rele himoyasi
- Sinflar va nomlar bo'shliqlari Ismlar bo'shliqlaridan foydalanish va e'lon qilish
- Belaruslik blogger. Ishlaringiz qalay? Belaruslik moda bloggerlari aytadilar. "G'azablangan" postlar va o'quvchilarning ularga bo'lgan munosabati haqida
- "Kompyuter va bolalar" mavzusidagi buklet Qo'lning to'g'ri pozitsiyasi
- Snoubord: hammasi qanday boshlandi?
- Dunyo xaritasida joylashgan joyning fotosurati, tavsifi
- Android v. uchun Rossiya temir yo'llari yo'lovchilari poezd chiptalarini yuklab oling
- Shaxsiy hisobingizdan qanday foydalanish va Intertelecom Assa-da hisobingizni tekshirish
Reklama
Sinflar va nomlar maydoni. Sinflar va nomlar bo'shliqlari Ismlar bo'shliqlaridan foydalanish va e'lon qilish |
Sinflar va nomlar maydoni .NET Framework sinflariEhtimol, boshqariladigan kodni yozishning eng katta foydasi - hech bo'lmaganda ishlab chiquvchi nuqtai nazaridan - siz undan foydalana olasiz. .NET tayanch sinf kutubxonasi . .NET asosiy sinflari boshqariladigan kod sinflarining katta to'plamini taqdim etadi, bu sizga avval Windows API yordamida hal qilinishi mumkin bo'lgan deyarli har qanday muammoni hal qilish imkonini beradi. Bu sinflarning barchasi bitta merosga ega bir xil IL ob'ekt modeliga amal qiladi. Bu shuni anglatadiki, siz istalgan .NET tayanch sinflaridan ob'ektlar yaratishingiz yoki ulardan o'z sinflaringizni meros qilib olishingiz mumkin. .NET tayanch sinflarini farq qiladigan jihati shundaki, ular intuitiv va ishlatish uchun qulay qilib yaratilgan. Masalan, mavzuni boshlash uchun siz sinfning Start() usulini chaqirishingiz kerak Ip. TextBox ob'ektini mavjud bo'lmasligi uchun ob'ektning Enabled xususiyatini "false" ga o'rnating. Kutubxonalardan foydalanish juda oson bo'lgan Visual Basic va Java dasturchilariga tanish bo'lgan ushbu yondashuv GetDIBits(), RegisterWndClassEx() va IsEqualIID() kabi API funksiyalari bilan yillar davomida kurashgan C++ dasturchilari uchun katta yengillik bo'ladi. oyna tutqichlarini o'tkazishni talab qiladigan ko'plab funktsiyalar. Biroq, C++ ishlab chiquvchilari har doim Windows API larining to‘liq to‘plamiga oson kirish imkoniga ega bo‘lishgan, Visual Basic 6 va Java dasturchilari esa o‘z tillaridan kiradigan asosiy operatsion tizim funksiyalari bilan chegaralangan. .NET tayanch sinflari Visual Basic va Java kutubxonalaridan foydalanish qulayligini Windows API funksiyalar to‘plamini nisbatan to‘liq qamrab olish bilan birlashtiradi. Ko'pgina Windows xususiyatlariga asosiy sinflar orqali kirish mumkin emas va bunday hollarda siz API funktsiyalariga murojaat qilishingiz kerak bo'ladi, lekin umuman olganda bu faqat eng ekzotik funktsiyalarga tegishli. Kundalik foydalanish uchun, odatda, asosiy sinflar to'plami etarli bo'ladi. Ammo agar siz API funksiyasini chaqirishingiz kerak bo'lsa, u holda .NET deb atalmishni ta'minlaydi platformani ishga tushirish mexanizmi, bu ma'lumotlar turini to'g'ri konvertatsiya qilishni kafolatlaydi, shuning uchun endi bu vazifa kod qaysi tilda yozilganidan qat'i nazar, C#, C++ yoki Visual Basic 2010 da to'g'ridan-to'g'ri C++ kodidan ushbu funksiyalarni chaqirishdan ko'ra qiyinroq emas. Nom maydonlariNom maydonlari.NET sinflar o'rtasidagi nomlash ziddiyatlarini oldini olish usulidir. Ular mijozni ifodalovchi sinfni belgilab, uni Mijoz deb ataydigan va keyin boshqa birov xuddi shu ishni qiladigan vaziyatlarning oldini olish uchun mo'ljallangan (bu juda keng tarqalgan stsenariy). Nomlar maydoni ma'lumotlar turlari guruhidan boshqa narsa emas, lekin u nomlar maydonidagi barcha ma'lumotlar turlarining nomlari avtomatik ravishda nom maydoni nomi bilan oldindan belgilanishi ta'siriga ega. Nom maydonlari bir-birining ichiga joylashtirilishi mumkin. Masalan, umumiy maqsadli .NET tayanch sinflarining aksariyati nomlar maydonida joylashgan Tizim. Asosiy sinf Massiv bu bo'shliqqa ishora qiladi, shuning uchun uning to'liq nomi System.Array. .NET platformasi barcha nomlarning nomlar maydonida e'lon qilinishini talab qiladi; masalan, siz o'z sinfingizni qo'yishingiz mumkin MyClass nom maydoniga Mening kompaniyam. Keyin bu sinfning to'liq nomi o'xshash bo'ladi MyCompany.MyClass. E'tibor bering, agar nom maydoni aniq ko'rsatilmagan bo'lsa, tur nomsiz global nom maydoniga qo'shiladi. Aksariyat hollarda Microsoft kamida ikkita ichki nom maydonidan foydalanishni tavsiya qiladi: birinchisi kompaniyangiz nomi, ikkinchisi esa sinfga tegishli bo'lgan texnologiya yoki dasturiy ta'minot paketining nomi, shuning uchun u quyidagicha ko'rinadi: MyCompany.SomeNamespace .MyClass. Ko'pgina hollarda, bu yondashuv ilovangiz sinflarini boshqa kompaniyalarning ishlab chiquvchilari tomonidan yozilgan sinf nomlari bilan yuzaga kelishi mumkin bo'lgan ziddiyatlardan himoya qiladi. Quyidagi jadvalda .NET da taklif qilingan nom maydonlarining ayrimlarining (lekin hammasi emas) qisqa roʻyxati berilgan, ular funksionallik asosida guruhlarga boʻlingan:
Microsoft ildiz maydonining roliJadvaldagi ro'yxatni ko'rib chiqayotganda, tizim nomlari maydoni munosib miqdordagi ichki nomlar bo'shliqlarining (masalan, System.IO, System.Data va boshqalar) ildizi ekanligini payqash oson edi. Ma'lum bo'lishicha, tizimga qo'shimcha ravishda, asosiy sinf kutubxonasi boshqa bir qator yuqori darajadagi ildiz nom maydonlarini ham taklif qiladi, ulardan eng foydalisi Microsoft nom maydoni. std nom maydonidan foydalanish nima degan savolga javob berib, birinchi navbatda shuni ta'kidlash kerakki, ta'riflangan atama ingliz tilidan tarjima qilinganda turli xil identifikatsiya shakllarini aniqlash uchun zarur bo'lgan deklaratsiya doirasi bo'lgan nom maydonini anglatadi: funktsiyalar va bog'liq/mustaqil o'zgaruvchilar. Buning yordamida nomlar o'rtasida ziddiyat yo'q, chunki bir nechta o'zgaruvchilar bir xil qiymatlarni qabul qiladigan holatlar mavjud. Odatda, bu turli kutubxonalar yaratilganda sodir bo'ladi. Identifikatorlar bir-biriga nisbatan erkin mavjud. To'liq ism formatidan foydalanganda ular mustaqil a'zolarga bepul kirish huquqiga ega bo'lishadi. Buning uchun bu juda muhim Shunday qilib, ob'ekt namespace std yordamida nomning to'liq shaklini o'z ichiga oladi. Bu deklaratsiya kosmik nomiga joylashtirilganda qanday ko'rinishini vizual tarzda tushunish uchun muhimdir. Rasmda kodlashlarga kirishning bir nechta variantlari ko'rsatilgan, uning to'siqlari ichida va tashqarisida joylashgan: 1 Bu shunday ko'rinadi to'liq ism: 2 Mavjud reklamani to'ldirish uchun, yordamida qo'shing: 3 Barcha mavjud identifikatorlarni qo'shish uchun, tegishli direktivadan foydalaning: Direktivdan foydalanishFoydalanish direktivasi nomlar maydoniga kiritilgan barcha mavjud nomlardan foydalanishga imkon beradi. Kvalifikatsiyani ko'rsatishning hojati yo'q. Siz cpp formatidagi fayldan foydalanishingiz kerak. Biroq, muhim shart - bu bir nechta identifikatorlarning mavjudligi. Agar bir nechta ism bo'lsa, oddiy nom yaratish dolzarb bo'ladi. Keyin siz faqat kerakli identifikatorlarni qo'shishingiz va qolganlarini yolg'iz qoldirishingiz mumkin. Shuni ta'kidlash kerakki, agar mahalliy o'zgaruvchining nomi va asosiysi mos kelsa, bu holda birinchisi yashirin kirishda bo'ladi. Iltimos, bir xil nomdagi o'zgaruvchilarni yaratish noqonuniy ekanligini unutmang. Maslahat! Foydalanish qulayligi uchun foydalanish direktivasi cpp formatidagi faylning yuqori qismida yoki aksincha yaratilgan kutubxona ichiga joylashtirilishi mumkin. O'zingiz uchun eng qulay ish sharoitlarini ta'minlash uchun siz kerakli fayllarni joylashtirish ustida ishlashingiz mumkin. Agar juda zarurat bo'lmasa, foydalanish direktivasi joylashtirilmasligi kerak H formatidagi fayldagi sarlavhalarda. Buning sababi shundaki, ushbu harakat bilan barcha identifikatorlar ko'rinish sohasida faollashadi, ba'zi nomlarning qarama-qarshilik ehtimolini oshiradi. Fayllar uchun eng yaxshi yechim to'liq nomdan foydalanishdir. Agar ular juda uzun bo'lib chiqsa, siz taxalluslar ko'rinishidagi qisqartmalardan foydalanishingiz mumkin. Nom maydoni deklaratsiyasiE'lonlarni fayl nomlari ko'rinishida joylashtirish odatiy holdir. Belgilangan funktsiyalarning bajarilishi alohida kutubxona yoki faylda joylashgan bo'lsa, to'liq ismni aniqlash muhimdir. Qanday harakatlar haqida gapirayotganimizni tushunish uchun bunga arziydi quyidagi rasmni tekshiring: cpp formatidagi kontosodata funksiyasini amalga oshirish uchun ishda to'liq ismdan foydalanish ham muhimdir direktivaning boshida bo'lganda: Namespace std dan foydalanish. bir vaqtning o'zida bir faylda joylashgan bir nechta bo'limlarda reklamalarni o'z ichiga olishi mumkin. Kompilyator tufayli ma'lumotlarga ishlov berish jarayonida barcha elementlar birlashtiriladi. Shunday qilib, masalan, std., qoida tariqasida, standart turdagi kirish mumkin bo'lgan kutubxonalarda joylashgan kirish mumkin bo'lgan fayllarning barcha sarlavhalarida e'lon qilinadi. To'liq malakali nom bilan tayinlangan a'zolar nafaqat nom maydoni ichida, balki aniq malakaga ega bo'lsa, undan tashqarida ham belgilanishi mumkin. Ta'rifga kelsak, u yaratilgan nom maydonidagi deklaratsiyadan keyin kelishi kerak. Vizual misol sifatida quyidagi rasmga e'tibor bering: Ko'pincha, bu xato aniqlash tartibi buzilganda yoki to'liq ismning tarkibiy qismlari darhol mavjud ob'ektlarga kiritilganda paydo bo'ladi. Agar cookie fayllari ma'lum bir nom maydonida e'lon qilinmasa, u rasmiy ravishda global tipdagi makonga tegishli. Maslahat! Agar zarurat bo'lmasa, a'zolarni global turdagi makonga kiritishdan qochish tavsiya etiladi. Qoidaga faqat muhim istisno bo'lishi mumkin asosiy variant, keng maydonga majburiy kiritishni nazarda tutadi. Global turdagi identifikatorni yaratish uchun siz to'liq ism ko'rinishida mos keladigan ko'rinish funksiyasidan foydalanishingiz kerak. Bu amal bitta identifikatorning boshqa nomlar maydonida mavjud bo'lganlardan farqlovchi xususiyatini yaratishga yordam beradi. Bu kodni tushunishingizga yordam beradi. Space std.Shuni ta'kidlash kerakki, bo'shliqlar ichki turdagi bo'lishi mumkin. Agar oddiy joylashtirish nazarda tutilgan bo'lsa, u butun maydon uchun cheksiz xususiyatga ega. Ota-onalar a'zolari haqida gapiradigan bo'lsak, ular bunday funktsiyaga ega emaslar. Kengaytirish uchun o'rnatilgan qo'shimchalar talab qilinadi. Aniqroq ta'rif va tushunish uchun, quyidagi rasmga e'tibor bering: Keyinchalik amalga oshirish uchun ma'lumotni qamrab olgan holda, u oddiy ichki makonning bir qismi bo'lishi mumkin va ota-ona makonida ochiq turdagi interfeys sifatida ishlaydi. Taqqoslash - bu standart turdagi oddiy qo'shimchalar, ota-ona nomi maydonining o'rnatilgan a'zolari. Natijada, siz argumentlarga bog'liq bo'lgan ortiqcha yuklanishga ega bo'lgan funktsiyalarni qidirishdan foydalanishingiz mumkin. Bog'lash qanday amalga oshirilganiga misolni ko'rish uchun, Quyidagi misolga murojaat qilish arziydi: Quyidagi rasmda ota-ona shablonidagi ixtisoslashuv jarayoni ko'rsatilgan, o'rnatilgan turdagi vaqtinchalik makonda e'lon qilingan: O'rnatilgan bo'shliqlardan foydalanish orqali standart kutubxonalarda interfeysning turli versiyalarini boshqarish mumkin. Bitta, bitta ota-ona maydonini yaratish va har bir taqdim etilgan interfeysni inkapsulyatsiya qilish mumkin. Biroq, u umumiy ota-ona maydonida biriktirma formatida bo'lishi kerak. Keyin mijoz kodi avtomatik ravishda yangi kombinatsiyaga tayinlanadi. Eski versiyadan foydalanishga odatlangan foydalanuvchilar undan hech qanday muammosiz foydalanishda davom etishlari mumkin. Buning uchun qo'shimchaga to'liq yo'lni yaratishingiz kerak. Birinchi e'lonni tashkil qilish uchun siz inline kalitdan foydalanishingiz kerak. Keling, har birida bo'sh joy bo'lgan ikkita interfeys variantining quyidagi misolini ko'rib chiqaylik. Mijoz kodi, shuningdek, yangi kutubxonalardan foydalanish imkoniyatiga ega. Jarayonni tasavvur qilish uchun Keling, quyidagi rasmga o'tamiz: Barcha nomlar juda noyob bo'lishi kerak, shuning uchun ularning uzunligi sezilarli darajada oshadi. Biroq, bu erda foydalanish direktivasidan foydalanish mumkin emas. Faqat nom maydoni uchun taxallus yaratish mumkin. Bunday holda, quyidagi misolni ko'rib chiqing: Oddiy bo'shliqni yaratish ham mumkin, lekin unga taxallus berilmagan. Bunday hududiy spektr anonim deb ataladi. Qoida tariqasida, u deklaratsiyadagi a'zolar boshqa ob'ektlarda kodlash uchun ko'rinmas bo'lishi kerak bo'lgan holatlarda qo'llaniladi. Butun struktura, barcha identifikatorlarni ko'rish mumkin bo'lsa-da, yaratilgan bo'shliqdan tashqarida ular ko'rinmas qoladi. Shuni ta'kidlash kerak, nomlar maydonining o'zi ham blokdan tashqarida ko'rinmas bo'ladi, shuning uchun har bir foydalanuvchi ushbu tafsilotga oldindan e'tibor berishi kerak. Odatda, bilimlardan foydalanish Visual C++ da ishlayotganlar uchun talab qilinadi. Yuqori sifatli misollardan foydalanib, ushbu mavzuni tushunish ancha oson bo'ladi.
C++ da nomlar maydoni nima? Nomlar maydoni - bu mantiqiy bog'liq deklaratsiyalarni umumiy nom ostida guruhlash usuli. Nom maydoniga misol: // @author Subbotin B.P..h" nom maydoni birinchi ( int a; float b; ) nom maydoni ikkinchi ( int a; float b; ) int _tmain(int argc, _TCHAR* argv) ( birinchi::a = 1; ikkinchi:: a = 2; birinchi::b = 1,23; ikkinchi::b = 4,56; printf("\nbirinchi::a = %d\n", birinchi::a); printf("\nikkinchi::a = %d \n", ikkinchi::a); printf("\nbirinchi::b = %.2f\n", birinchi::b); printf("\nikkinchi::b = %.2f\n\n", ikkinchi ::b); 0 qaytaring;) Biz olamiz: Misolda ikkita nom maydoni yaratilgan: birinchi va ikkinchi. Ikkala bo'shliq ham bir xil o'zgaruvchilarni o'z ichiga oladi. Ammo, masalan, a o'zgaruvchisi birinchi bo'shliqqa tegishli ekanligi, uni boshqa nom maydonidagi o'zgaruvchi bilan chalkashtirib yuborishga imkon bermaydi. Bu nom ziddiyatlarining oldini oladi. birinchi fazoda e'lon qilingan int a o'zgaruvchisi ishlatilishini bildiradi. Bu foydalanish deklaratsiyasiga misol. :: operatori qamrov operatori deb ataladi. Nomlar bo'shliqlari namespace kalit so'zi yordamida yaratiladi: Avval nom maydoni ( int a; float b; ) Nomlar maydonidagi barcha nomlardan foydalanish uchun siz namespace direktivasidan foydalanishingiz mumkin. Namespace std dan foydalanishga misol: std nom maydonidan foydalanish std nom maydonidagi nomlardan foydalanish imkonini beradi. std - C++ standart kutubxonasining nomi. Agar oxirgi misolda namespace std yordamida nom maydoniga ulanish qatorini olib tashlasak, u holda nom maydoni nomini aniq ko'rsatishimiz kerak bo'ladi: // @author Subbotin B.P..h" #include Nomlar maydoni qamrovni belgilaydi. Misollar nomlar bo'shliqlarini aniq belgilab berdi. Bu erda nom maydonlarining boshqa misollari mavjud. Funksiya ichidagi qamrov ham nomlar maydoni hisoblanadi. Global o'zgaruvchilar doirasi ham nomlar maydonidir. Sinf ham nomlar maydonidir. Nomsiz fazo yaratish mumkin. Misol: // @author Subbotin B.P..h" nom maydoni ( int a; int b; ) int _tmain(int argc, _TCHAR* argv) ( a = 5; b = 8; printf("\n a = %d\n", a ); printf("\n b = %d\n\n", b); qaytish 0; ) Bu foydalanish nom maydoni direktivasidan foydalanishni nazarda tutadi. Mumkin bo'lgan nom ziddiyatlarini oldini olish uchun bunday nomlar maydoni kerak. Agar nom maydoni nomi juda uzun bo'lsa, siz nom maydoniga taxallus yaratishingiz mumkin. Misol: // @author Subbotin B.P..h" nomlar maydoni underground ( int a; int b; ) nom maydoni ug = underground; int _tmain(int argc, _TCHAR* argv) ( ug::a = 5; ug::b = 8; printf ("\n ug::a = %d\n", ug::a); printf("\n ug::b = %d\n\n", ug::b); qaytarish 0; ) nom maydoni ug = yer osti; er osti nom maydoni uchun ug taxallusni taqdim etadi. Keyin taxallus bilan ishlaymiz. Agar siz nomlar maydonidagi nomlarning faqat bir qismini ishlatmoqchi bo'lsangiz, ushbu qismni yangi nom maydoniga tanlashingiz va undan foydalanishingiz mumkin. Misol: // @author Subbotin B.P..h" nomlar maydoni underground ( int a; int b; int c; float d; double e; ) nom maydoni ug ( underground::a; underground yordamida::b; ) int _tmain(int argc, _TCHAR* argv) ( ug::a = 5; ug::b = 8; printf("\n ug::a = %d\n", ug::a); printf("\n ug::b = %d\n\n", ug::b); 0ni qaytaring; ) Bu erda er osti nomlar maydonining beshta o'zgaruvchisidan faqat ikkitasini ishlatishni taxmin qilamiz. Biz yangi ug nom maydonini yaratamiz, unda ikkita foydalanish deklaratsiyasi mavjud. Keyinchalik biz ug nom maydoni bilan ishlaymiz. Nomlar maydoni o'zgartirilishi mumkin, ya'ni. unga yangi reklama qo'shing. Misol: // @author Subbotin B.P..h" nomlar maydoni underground ( int a; int b; ) nomlar maydoni underground ( float c; ) int _tmain(int argc, _TCHAR* argv) ( underground::a = 5; underground::b = 8 ; underground::c = 1.2; printf("\n underground::a = %d\n", underground::a); printf("\n underground::b = %d\n", underground::b ); printf("\n underground::c = %.1f\n\n", underground::c); qaytish 0; ) Biz olamiz: Nomlar bo'shliqlari joylashtirilishi mumkin Misol: // @author Subbotin B.P..h" nomlar maydoni yuqori ( int a; int b; nomlar maydoni ichki ( float c; ) ) int _tmain(int argc, _TCHAR* argv) ( yuqori::a = 5; yuqori::b = 8 ; upper::inner::c = 1,2; printf("\n yuqori::a = %d\n", yuqori::a); printf("\n yuqori::b = %d\n", yuqori ::b); printf("\n yuqori::ichki::c = %.1f\n\n", yuqori::ichki::c); 0; ) Biz olamiz: Misolda, nom maydonining yuqori qismida ichki nom maydoni mavjud. Ichki nom maydoniga qanday kirishiga e'tibor bering: yuqori::ichki::c = 1,2; Keling, global nomlar maydonini ko'rib chiqaylik. Bu yerda :: operatori bo'shliq nomini ko'rsatmasdan ishlatiladi. Global nomlar maydoni global deklaratsiyalarni, shu jumladan tegishli foydalanish direktivalarini o'z ichiga oladi. Global nom maydoniga misol: // @author Subbotin B.P..h" #include Deklaratsiyalardan foydalanish va direktivalardan foydalanish o'rtasidagi farqni ko'rish muhimdir. Foydalanish direktivasi berilgan nomlar maydonidagi barcha nomlarni mavjud qiladi, lekin ularni mahalliy sifatida e'lon qilmaydi. Use deklaratsiyasi use direktivasidan ustun turadi. Keling, bir misolni ko'rib chiqaylik: // @author Subbotin B.P..h" nom maydoni sbp ( int a; int b; int c; ) int a; int _tmain(int argc, _TCHAR* argv) ( int a; nom maydonidan foydalanish sbp; a = 1; sbp:: a = 2; ::a = 3; printf("\n a = %d\n", a); printf("\n sbp::a = %d\n", sbp::a); printf(" \n::a = %d\n\n", ::a); qaytish 0; ) Biz olamiz: sbp nom maydonidan foydalanish; Bu sbp nom maydonidagi barcha nomlarni mavjud qiladigan foydalanish direktivasi. Bu mahalliy o'zgaruvchi bilan ishlaydi a. sbp bo'sh joyidan a o'zgaruvchisiga qiymatlarni belgilash uchun siz sbp ni aniq ko'rsatishingiz kerak: Xuddi shu narsa global o'zgaruvchiga ham tegishli. Mahalliy o'zgaruvchi a bir xil nomdagi global o'zgaruvchilarni yopadi. Endi foydalanish deklaratsiyasiga misol: // @author Subbotin B.P..h" nom maydoni sbp ( int a; int b; int c; ) int a; int _tmain(int argc, _TCHAR* argv) ( int a; a = 1; sbp::b; b dan foydalanish = 2; ::a = 3; printf("\n a = %d\n", a); printf("\n sbp::b = %d\n", sbp::b); printf("\ n::a = %d\n\n", ::a); 0ni qaytaring; ) Biz olamiz: Bu foydalanish deklaratsiyasi. Bu erda b o'zgaruvchisi sbp nom maydonidan lokal ravishda e'lon qilinadi. Ushbu e'londan so'ng siz quyidagi harakatlarni amalga oshirishingiz mumkin: lekin a uchun foydalanish deklaratsiyasi bizni xatoga olib keladi, chunki misolda a mahalliy o'zgaruvchisi allaqachon aniqlangan. Yordam beradi. Ismlar maydoni, yordam bering! Siz bir xil funktsiyani, sinfni, interfeysni e'lon qilishingiz va alohida nomlar bo'shliqlarida doimiyni aniqlashingiz mumkin, bu esa jiddiy xatolarga yo'l qo'ymaydi. Asosiysi, nom maydonlari oddiy PHP kodini o'z ichiga olgan ierarxik etiketli kod bloklaridan boshqa narsa emas. Global nomlar maydoni, shuningdek, mysqli_connect() va Exception sinfi kabi PHP ning barcha ichki ta'riflarini ham saqlaydi. Global nom maydoni noyob identifikator nomiga ega emasligi sababli, u ko'pincha global nomlar maydoni deb ataladi. Nomlar bo'shliqlari ajratilgan so'z nomlari maydoni yordamida e'lon qilinadi. Nom maydonlari PHPdagi boshqa identifikatorlar bilan bir xil qoidalarga amal qiladi. Shunday qilib, nom maydoni kerak harf yoki pastki chiziqdan keyin istalgan sonli harflar, raqamlar yoki pastki chiziq bilan boshlang. Agar siz global maydonda kod blokini aniqlamoqchi bo'lsangiz, nom qo'shmasdan nomlar maydoni kalit so'zidan foydalanishingiz mumkin. Bitta faylda bir nechta nom maydonidan foydalanishingiz mumkin. Siz bir nechta turli fayllar uchun bir xil nom maydonidan foydalanishingiz mumkin; faylga ulanish jarayoni ularni avtomatik ravishda birlashtiradi. Sinflar bilan bo'lgani kabi, nom maydoni ta'riflari sonini bitta faylga cheklash yaxshi kodlash amaliyotidir. Moslashuvchanlik uchun ichki kataloglarni ichki kataloglarda saqlash oqilona. Bu loyihani tuzishga yordam beradi va PSR-4 standartiga rioya qiluvchi avtoyuklagichlar uchun foydalanishni ancha osonlashtiradi. PHP nom maydonini ajratuvchi sifatida teskari chiziqdan foydalanadi. Qiziqarli fakt: RFCda qaysi nom maydoni ajratuvchisidan foydalanishni hal qilish uchun kulgichdan foydalanish varianti ko'rib chiqildi. // myproject/ma'lumotlar bazasi/connection.phpIstaganingizcha ko'plab ichki nomlar maydonidan foydalanishingiz mumkin. Ichki kod bloklari bilan pastki nomlar maydonini belgilash qo'llab-quvvatlanmaydi. Quyidagi misol halokatli xatoni qaytaradi: "Ismlar maydoni deklaratsiyasini joylashtirish mumkin emas." Quyidagi misol halokatli xatoni qaytaradi: "Muhim xato: "MyProject\Ma'lumotlar bazasi\MyProject\FileAccess\Input" klassi topilmadi", chunki MyProject\FileAccess\Input siz joylashgan nom maydoniga tegishli emas. Agar siz ierarxiyaning yuqori darajasida joylashgan funksiya, sinf yoki konstantaga kirishni istasangiz, unda siz nisbiy emas, to'liq ism - mutlaq yo'ldan foydalanishingiz kerak. Qo'ng'iroq teskari chiziq bilan boshlanishi kerak. Bu PHP-ga ushbu qo'ng'iroqni joriy joylashuvingizga nisbatan kirishdan ko'ra, global makondan amalga oshirish kerakligini bilish imkonini beradi. PHP ichki funksiyalari uchun toʻliq nomdan foydalanishimiz shart emas. Funktsiyalar va konstantalar uchun nomaqbul nomlar, agar ular joriy nomlar maydonida aniqlanmagan bo'lsa, global nomlar maydonida aniqlanadi. Buni bilgan holda, biz asl funktsiyani (yoki doimiy) chaqirish imkoniga ega bo'lgan holda, endi ichki PHP funktsiyalarini ortiqcha yuklashimiz mumkin. ";
}
Bu doimiy nomlar maydonini o'rganishni boshlaganda juda foydali; disk raskadrovka uchun ham juda foydali. U satr bo'lgani uchun uni yuqorida muhokama qilingan dinamik kod chaqiruvlari bilan birgalikda ishlatish mumkin. Importlar nomlar maydonining juda foydali va asosiy jihati hisoblanadi. Bu sizga kutubxonalar kabi tashqi paketlardan nom ziddiyati haqida qayg'urmasdan foydalanish imkoniyatini beradi. Import use kalit so'zi yordamida amalga oshiriladi. Agar xohlasangiz, as kalit so'zidan foydalanib, maxsus taxallusni belgilashingiz mumkin. sifatida foydalaning Shu bilan bir qatorda boshqa nom bilan taxallusni tayinlash mumkin Istisno kabi global sinflarni ham import qilishingiz mumkin. Import qilishda uning mutlaq nomini yozish shart emas. Esda tutingki, nom maydonidagi nomlar uchun bosh teskari chiziq kerak emas va uning mavjudligi tavsiya etilmaydi, chunki import qilingan nomlar mutlaq bo'lishi va joriy nom maydoniga nisbatan tahlil qilinmasligi kerak. Dinamik nom maydonini chaqirish qo'llab-quvvatlansa ham, dinamik import qo'llab-quvvatlanmaydi. Izoh: Ushbu bo'lim nomlar maydonidan foydalanish va e'lon qilishni tavsiflaydi. RDF, XML-Data, Document Content Description (DCD), Sxema for Object-oriented XML (SOX), Document Definition Markup Language (DDML, ilgari XSchema deb nomlanuvchi) ning asosiy xarakteristikalari berilgan. Biz ilgari DTD ta'riflarining ba'zi kamchiliklarini tasvirlab berdik, ular quyidagilar bilan bog'liq: Ushbu bob quyidagi ikkita tushunchani qamrab oladi - nom maydoni va XML sxemalari. Nomlar bo'shliqlari XML ishlab chiquvchilariga murakkab muammolarni kichik bo'laklarga ajratish va uni to'liq tavsiflash uchun bir nechta lug'atlarni bitta hujjatda birlashtirish imkonini beradi. Sxemalar yordamida lug'at dizaynerlari DTDlarda mumkin bo'lganidan ko'ra aniqroq ta'riflarni yaratadilar va buni XML sintaksisi yordamida amalga oshiradilar. Ushbu ikkita vosita XML dan foydalanishda yuzaga keladigan murakkab muammolarni hal qilishga yordam beradi. Nomlar va sxemalar XML dizaynerlari va dasturchilariga quyidagilarga imkon beradi: Lug'atni loyihalashda global muammoni bir nechta tarkibiy qismlarga ajratish mantiqiy bo'lishi mumkin. Bu katta muammoni bir nechta lug'atlarga bo'lish usullarini talab qiladi. Biroq, hal qilinishi kerak bo'lgan haqiqiy muammo - bu alohida DTDlarni bitta hujjatning tanasida birlashtirish. Agar siz, masalan, DTD ta'riflari to'plami mavjud bo'lgan korporatsiyada ishlayotgan bo'lsangiz va ulardan foydalanish ishni sezilarli darajada osonlashtirishi mumkin bo'lsa, bu muammo paydo bo'lishi mumkin, chunki ular muammoni boshqalar tushunganidek tasvirlaydi. Ko'pincha DTD ta'riflarini qayta ishlatish ham foydalidir, ya'ni. Oldindan yaratilgan DTD ta'riflaridan umumiy konstruktsiyalardan foydalanish. Agar siz tashqi hamkorning dasturiy ta'minoti bilan bog'lanishi kerak bo'lgan dastur ishlab chiqayotgan bo'lsangiz, mavjud tushunchalarni qayta ishlatishdan boshqa tanlovingiz kam. DTD ning mavjud ta'riflari tushunish uchun gapirish kerak bo'lgan umumiy tilni tashkil qiladi. Agar kontseptsiya allaqachon mavjud bo'lsa, uni tushunish uchun ishlash kerak. Boshqa ishlab chiquvchilarning DTDlaridan sizga foydali boʻlgan taʼriflardan foydalanganda yoki murakkab muammoni tavsiflovchi hujjat yaratish uchun segmentlangan DTDlarni birlashtirganingizda, agar hujjatlaringiz bir xil nomdagi elementlardan foydalansa, muammo yuzaga kelishi xavfi tugʻiladi. noaniqlik va nomlar to'qnashuvi. Muammo bir nechta DTDlardan nom namunalarini qo'llashda yanada kuchayadi. Bunday holda, biz DTD ta'rifi qaysi elementga tegishli ekanligini bilmaymiz, yaxshi shakllangan hujjatlarning bu muammosi noaniqlik deb ataladi. Bundan tashqari, agar hujjatdagi nomlar talab qilsa haqiqiyligini tekshirish, biz ilovamizni juda chalkashtirib yuborishimiz mumkin. Ushbu muammo nomlarning to'qnashuvi deb ataladi. Nomlar bo'shliqlari foydalanuvchiga ikkita muhim usulda yordam berishi mumkin. Ularning yordami bilan siz: Nomlar maydoni - bu XML hujjatlarida elementlar yoki atributlar nomi sifatida ishlatilishi mumkin bo'lgan ma'lum qiymatlar yoki xususiyatlar to'plami. XML-dagi nomlar bo'shliqlari Yagona Resurs Identifikatori (URI) tomonidan aniqlanadi (siz serveringizdagi DTD manzilini URI sifatida ishlatishingiz mumkin). Bu har bir nom maydonini noyob bo'lishiga imkon beradi. Shunday qilib, turli manbalardagi elementlarni birlashtirgan hujjatda nomlar bo'shliqlaridan samarali foydalanish uchun biz quyidagilarni aniqlashimiz kerak: Turli xil belgilash tillarida - XML ilovalarida - teglarning bir xil nomlari va ularning atributlari mutlaqo boshqacha ma'noga ega bo'lishi mumkinligi sababli, ularni qandaydir tarzda ajrata olish kerak. Buning uchun teg va atributlarning nomlariga qisqa prefiks beriladi, u nomdan ikki nuqta bilan ajratiladi. Ism prefiksi nom maydonini belgilaydigan identifikator bilan bog'langan. Prefikslari bir xil identifikator bilan bog'langan barcha teg va atribut nomlari yagona nom maydonini tashkil qiladi, unda nomlar yagona bo'lishi kerak. Biz hamma nom fazosi deklaratsiyasini ko'rganimizda tanib olishini xohlayotganimiz sababli, biz unga maxsus so'z ajratamiz. Nomlar bo'shliqlari tavsiyasiga ko'ra, so'z xmlns . Atributning qiymati foydalanish uchun nom maydonini belgilaydigan URI hisoblanadi. Bu ko'pincha DTD ta'rifining URL manzilidir, lekin har doim ham shunday bo'lishi shart emas. Nom maydoni prefiksi va identifikatori xmlns atributi tomonidan quyidagicha aniqlanadi: Ko'rib turganingizdek, ntb prefiksi endigina aniqlangan, lekin u allaqachon ntb nomida ishlatilishi mumkin: notebook . Kelajakda http://some.firm.com/2003/ntbml nom maydoniga belgilamoqchi bo'lgan teglar va atributlar nomlari ntb bilan prefikslanadi, masalan: Bundan tashqari, bir tegda bir nechta nom maydoni paydo bo'lishi mumkin. Quyida bir nechta nom maydonini aralashtirish misoli keltirilgan: Kitob elementi katalog nom maydonidan, ISBN atributi orderdan keladi. Masalan, prefiks bilan birga nom bering kengaytirilgan, malakali yoki malakali nom (OName. Qualified Name) deb ataladi. Ismning ikki nuqtadan keyin yoziladigan qismi otning mahalliy qismi deyiladi. Veb-resurs nomlarining nomenklaturasi chalkash bo'lishi mumkin. Yagona Resurs Locator ( Yagona Resurs Locator, URL) kirish protokoli va tarmoq joylashuvi nuqtai nazaridan resursni bildiradi. Yagona manba identifikatori ( Yagona manba identifikatori, URI) ba'zi manbalar uchun noyob nom. URI ga oddiygina nomlar maydonini aniqlaydigan noyob belgilar qatori sifatida qarang. SGML va XML qoidalariga ko'ra, ikkita nuqta oddiy belgi sifatida nomlarda ishlatilishi mumkin, shuning uchun prefiksli ism shunchaki hiyla-nayrang; nomlar maydonini "bilmaydigan" har qanday dastur hujjatni tahlil qiladi, ishlov beradi. malakali ism oddiy ism sifatida. Bundan kelib chiqadiki, xususan, in hujjat turi deklaratsiyasi(Hujjat turi deklaratsiyasi) nomi prefikslarini o'tkazib yuborish mumkin emas. Xmlns atributi faqat ildiz elementida emas, balki har qanday XML elementida paydo bo'lishi mumkin. U belgilagan prefiks xmlns atributi yozilgan elementda va uning ichida joylashgan barcha elementlarda ishlatilishi mumkin. Bundan tashqari, bitta elementda bir nechta nom maydoni aniqlanishi mumkin. O'rnatilgan elementlarda nomlar maydonini prefiksni boshqa identifikator bilan bog'lash orqali bekor qilish mumkin. Nomlar maydonidan foydalanadigan hujjatda teg nomining prefikssiz ko'rinishi bu nomning standart nom maydoniga tegishli ekanligini bildiradi. Yaxshi ishlab chiqilgan hujjat uning barcha elementlari uchun nom maydonidan foydalanishi kerak. Xml belgilaridan boshlanadigan prefikslar har qanday holatda ham XML tilining o'zi uchun ajratilgan. Xmlns prefiksi boshqa aniqlangan prefiksni uning nom maydoni identifikatori bilan bog'lash uchun ishlatiladi. Xmlns prefiksi aniqlanishi shart emas, u "XML-dagi nomlar bo'shliqlari" tavsiyasi bilan kiritilgan va u erda nom maydoni identifikatori bilan bog'langan. http://www.w3.ori/2000 /xmlns/. Boshqa prefiks xml identifikator bilan bir xil tavsiyada bog'langan http://www.w3.org/XML/1998/namespace. Bundan tashqari, XML hujjatida aniqlanishi shart emas. Bu identifikatorlar bilan boshqa hech qanday prefiksni bog‘lab bo‘lmaydi. bo‘sh joy belgilarini saqlab qolish ko‘rsatmalarini saqlang. Bu dastur kodlari kabi ba'zi matnlar uchun muhim. Standart qiymat bo'sh joyni ishlov beruvchining ixtiyoriga qoldiradi. Nomlar maydoni deklaratsiyasi dasturlash tillaridagi o'zgaruvchilar deklaratsiyasi kabi qamrovga ega. Bu juda muhim, chunki nomlar maydoni har doim ham XML hujjatining boshida e'lon qilinmaydi; ba'zan ular keyingi bo'limlarda e'lon qilinadi. Nom maydoni deklaratsiyasi u paydo bo'lgan elementga, shuningdek, u erda aniq belgilanmagan bo'lsa ham, ushbu elementning avlodlariga nisbatan qo'llaniladi. Ism faqat deklaratsiya doirasida foydalanilgandagina nom maydoniga murojaat qilishi mumkin. Shu bilan birga, biz boshqa nom maydonlarini meros qilib oladigan elementlarga nom maydoni doiralarini aralashtirishimiz kerak bo'ladi. Shu munosabat bilan, qamrovni e'lon qilishning ikkita usuli aniqlanadi: standart va malakali. Siz kutganingizdek, hujjatdagi har bir ismga prefiks qo'yish tezda zerikarli bo'ladi. Aslida, nom doirasi tushunchasini kiritish orqali biz hujjatimizda ko'p sonli prefikslarni aralashtirishimiz mumkin. Agar biz standart nom maydonini aniqlasak, u o'z deklaratsiyasi doirasidagi barcha noaniq nomlarga egalik qiladi deb taxmin qilinadi. Shunday qilib, ildiz elementida e'lon qilingan standart nom maydoni butun hujjat uchun standart hisoblanadi va faqat hujjat ichida e'lon qilingan aniqroq nom maydoni tomonidan bekor qilinishi mumkin. Nom maydonini qamrov uchun standart nom maydoni qilish uchun shunchaki prefiks deklaratsiyasini o'tkazib yuboring. Agar prefiks e'lon qilinsa va keyin nom bilan birgalikda ishlatilsa, nom maydoni aniq belgilangan deb aytiladi. Nomlar maydoniga nomaqbul nom berish uchun siz nomaqbul nomni (prefikssiz) o'z ichiga olgan standart bo'shliqni e'lon qilishingiz kerak. Agar siz nomlar bo'shliqlarini aniq ajratib olsangiz, yuqoridagi usul yaxshi ishlaydi. Ammo ba'zida hujjatga tashqi nomlar maydonidan individual nomlarni kiritish kerak bo'ladi. Butun doira uchun nom bo'shliqlarini e'lon qilish o'rniga, malakali nomlardan foydalanishingiz mumkin. Hujjatning boshida sizga kerak bo'lgan nomlar bo'shliqlarini e'lon qiling, so'ngra ulardan foydalanish joyida kvalifikatsiya qiling. |
Mashhur:
Yangi
- Boshqarish ob'ektlarini parametrik identifikatsiyalash usullari
- Elektr quvvat tizimlarini rele himoyasi
- Sinflar va nomlar bo'shliqlari Ismlar bo'shliqlaridan foydalanish va e'lon qilish
- Belaruslik blogger. Ishlaringiz qalay? Belaruslik moda bloggerlari aytadilar. "G'azablangan" postlar va o'quvchilarning ularga bo'lgan munosabati haqida
- "Kompyuter va bolalar" mavzusidagi buklet Qo'lning to'g'ri pozitsiyasi
- Snoubord: hammasi qanday boshlandi?
- Dunyo xaritasida joylashgan joyning fotosurati, tavsifi
- Android v. uchun Rossiya temir yo'llari yo'lovchilari poezd chiptalarini yuklab oling
- Shaxsiy hisobingizdan qanday foydalanish va Intertelecom Assa-da hisobingizni tekshirish
- Odnoklassnikida Gosha uchun ajoyib nomlar