c dagi nomlar maydoni nima. Sinflar va nomlar maydoni. Nom maydonidan chaqiruv kodi

Sinflar va nomlar maydoni

.NET Framework sinflari

Ehtimol, 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 maydonlari

Nom 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:

.NET Framework kalit nom maydonlari
.NET da nomlar maydoni Tavsif
Tizim Nomlar maydoni ichida Tizim ichki ma'lumotlar, matematika, tasodifiy sonlarni yaratish, atrof-muhit o'zgaruvchilari va axlat yig'ish bilan ishlash uchun juda ko'p foydali turlarni, shuningdek, bir qator tez-tez ishlatiladigan istisnolar va atributlarni o'z ichiga oladi.
Tizim.To'plamlar
Tizim.Toʻplamlar.Umumiy
Bu nomlar maydonida bir qancha konteyner turlari, shuningdek, maxsus kollektsiyalar yaratish imkonini beruvchi bir nechta asosiy turlar va interfeyslar mavjud.
Tizim.Ma'lumotlar
System.Data.Common
System.Data.EntityClient
System.Data.SqlClient
Bu nomlar bo'shliqlari ADO.NET yordamida ma'lumotlar bazalari bilan o'zaro ishlash uchun ishlatiladi
System.IO
System.IO.Compression
System.IO.Ports
Ushbu bo'shliqlar fayllarni kiritish-chiqarish, ma'lumotlarni siqish va portni manipulyatsiya qilish uchun mo'ljallangan ko'plab turlarni o'z ichiga oladi.
Tizim.Ko'zgu
System.Reflection.Emit
Bu nomlar bo'shliqlari dinamik tip yaratish bilan bir qatorda ish vaqti turini aniqlashni qo'llab-quvvatlaydigan turlarni o'z ichiga oladi
System.Runtime.InteropServices Bu nomlar maydoni .NET turlarining "boshqarilmaydigan kod" (masalan, C-ga asoslangan DLL va COM serverlari) bilan o'zaro ta'siriga ruxsat berishingiz mumkin bo'lgan vositalarni o'z ichiga oladi.
Tizim.Chizma
System.Windows.Forms
Ushbu nomlar bo'shliqlari mahalliy .NET (Windows Forms) grafik asboblar to'plamidan foydalangan holda ish stoli ilovalarini yaratish uchun ishlatiladigan turlarni o'z ichiga oladi.
System.Windows
System.Windows.Controls
System.Windows.Shapes
Kosmos System.Windows Windows Presentation Foundation (WPF) grafik vositalari to'plamini ifodalovchi ushbu bir nechta nom maydonlarining ildizidir.
System.Linq
System.Xml.Linq
System.Data.DataSetExtensions
Ushbu nom maydonlari LINQ API yordamida dasturlashda foydalaniladigan turlarni o'z ichiga oladi
System.Web Bu nomlar maydoni ASP.NET veb-ilovalarini yaratish imkonini beruvchi ko'plab sohalardan biridir
System.ServiceModel Bu nom maydoni Windows Communication Foundation (WCF) API yordamida taqsimlangan ilovalarni yaratishda foydalanishingiz mumkin bo'lgan ko'plab dasturlardan biridir.
System.Workflow.Runtime
Tizim.Ish oqimi.Faoliyatlar
Ushbu ikkita nom maydoni Windows Workflow Foundation (WWF) API yordamida ish oqimini qo'llab-quvvatlaydigan ilovalarni yaratish uchun ishlatiladigan turlarni o'z ichiga olgan ko'plab nom maydonlarining asosiy vakillari hisoblanadi.
Tizim.Threading
Tizim.Threading.Vazifalar
Ushbu nom maydoni ish yukini bir nechta protsessorlarga taqsimlay oladigan ko'p tarmoqli ilovalarni yaratish uchun ko'plab turlarni o'z ichiga oladi.
Tizim. Xavfsizlik Xavfsizlik .NET dunyosiga xosdir. Xavfsizlik bilan bog'liq nom maydonlari ruxsatlar, kriptografik xavfsizlik va boshqalar bilan shug'ullanadigan ko'plab turlarni o'z ichiga oladi.
System.Xml Ushbu XML-yo'naltirilgan nom maydoni XML ma'lumotlari bilan o'zaro ishlash uchun ishlatilishi mumkin bo'lgan ko'plab turlarni o'z ichiga oladi

Microsoft ildiz maydonining roli

Jadvaldagi 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 foydalanish

Foydalanish 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 deklaratsiyasi

E'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 direktiva eng boshida bo'lsa:

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.

Aytaylik, biz oldingi misollarda ishlab chiqilgan Array sinfimizni baham ko'rmoqchimiz. Biroq, biz bu muammoni hal qilishda yolg'iz emas edik; Ehtimol, kimdir biror joyda, aytaylik, Intel bo'linmalaridan birida xuddi shu nomdagi sinfni yaratgan. Ushbu sinflarning nomlari bir xil bo'lgani uchun potentsial foydalanuvchilar bir vaqtning o'zida ikkala sinfdan ham foydalana olmaydilar, ulardan birini tanlashlari kerak. Bu muammo sinf nomiga uning ishlab chiquvchilarini aniqlaydigan bir qator qatorni qo'shish orqali hal qilinadi, masalan:

Class Cplusplus_Primer_Third_Edition_Array ( ... );

Albatta, bu ham nomning o'ziga xosligini kafolatlamaydi, lekin foydalanuvchini bu muammodan xalos qiladi. Biroq, bunday uzun ismlarni ishlatish qanchalik noqulay!
C++ standarti nomga mos keladigan muammoni hal qilish mexanizmini taklif qiladi nom maydoni. Har bir dasturiy ta'minot ishlab chiqaruvchisi o'z sinflari, funktsiyalari va boshqa ob'ektlarni o'z nom maydoniga o'rashi mumkin. Masalan, Array sinfimiz deklaratsiyasi shunday ko'rinadi:

Ism maydoni Cplusplus_Primer_3E ( shablon sinf massivi(...); )

Namespace kalit so'zi bu holda Cplusplus_Primer_3E deb ataladigan sinfimizning ko'rinishini belgilaydigan nom maydonini belgilaydi. Aytaylik, bizda boshqa ishlab chiquvchilarning sinflari turli nomlar maydoniga joylashtirilgan:

Nom maydoni IBM_Canada_Laboratory (shablon sinf massivi(...);
sinf matritsasi(...);
}
nom maydoni Disney_Feature_Animation (
sinf nuqtasi(...);
shablon sinf massivi(...);
}

Odatiy bo'lib, aniq nom maydonisiz e'lon qilingan ob'ektlar dasturda ko'rinadi; ga tegishli global nom maydoni. Ob'ektga boshqa bo'shliqdan murojaat qilish uchun uning nomlar maydoni identifikatori va ob'ekt identifikatoridan iborat bo'lgan malakali nomidan foydalanish kerak, ular doirani aniqlash operatori (::) bilan ajratiladi. Yuqoridagi misollardagi ob'ektlarga qo'ng'iroqlar quyidagicha ko'rinadi:

Cplusplus_Primer_3E::Array matn; IBM_Canada_Laboratory::Matrix mat; Disney_Feature_Animation::Point kelib chiqishi (5000,5000);

Foydalanish qulayligi uchun siz nomlar maydoniga taxalluslarni belgilashingiz mumkin. Taxallus qisqa va eslab qolish oson bo'lishi uchun tanlangan. Masalan:

// taxalluslar nom maydoni LIB = IBM_Canada_Laboratory; nom maydoni DFA = Disney_Feature_Animation;
int main()
{
LIB :: Massiv ia(1024);
}

Taxalluslar nomlar bo'shliqlaridan foydalanishni yashirish uchun ham ishlatiladi. Taxallusni almashtirish orqali biz jalb qilingan funktsiyalar va sinflar to'plamini o'zgartirishimiz mumkin va boshqa barcha jihatlarda dastur kodi bir xil bo'lib qoladi. Yuqoridagi misolda faqat bitta qatorni tuzatib, biz butunlay boshqa massivning ta'rifini olamiz:

Nom maydoni LIB = Cplusplus_Primer_3E; int main() (LIB::Array ia(1024); )

Albatta, bu mumkin bo'lishi uchun sinf interfeyslari va ushbu nomlar bo'shliqlarida e'lon qilingan funktsiyalar o'rtasida aniq moslik bo'lishi kerak. Tasavvur qilaylik, Disney_Feature_Animation-ning Array sinfida bitta parametr - o'lchamli konstruktor yo'q. Keyin quyidagi kod xatoga yo'l qo'yadi:

Ismlar maydoni LIB = Disney_Feature_Animation;
int main()
{
LIB :: Massiv ia(1024);
}

Ba'zi nomlar sohasida aniqlangan ob'ektlarga murojaat qilish uchun oddiy, sifatsiz nomdan foydalanish yanada qulayroq usuldir. Buning uchun foydalanish direktivasi mavjud:
#"IBM_Canada_Laboratory.h"ni o'z ichiga oladi

IBM_Canada_Laboratory nom maydonidan foydalanish;
int main()
{
Matritsa mat (4,4);
// IBM_Canada_Laboratory::Array
Massiv ia(1024);
// ...
}

IBM_Canada_Laboratory nom maydoni dasturda ko'rinadi. Siz butun bo'shliqni emas, balki undagi alohida nomlarni ham ko'rishingiz mumkin (direktiv yordamida tanlangan):

#include "IBM_Canada_Laboratory.h" nom maydonidan foydalangan holda IBM_Canada_Laboratory::Matrix;
// faqat Matritsa ko'rinadi
int main()
{
// IBM_Canada_Laboratory::Matrix
Matritsa mat (4,4); // Xato: IBM_Canada_Laboratory::Array ko'rinmas
Massiv ia(1024);
// ... }

Yuqorida aytib o'tganimizdek, C++ standart kutubxonasining barcha komponentlari std nom maydonida e'lon qilingan. Shuning uchun, standart funktsiyalar va sinflardan bevosita foydalanish uchun sarlavha faylini kiritish etarli emas:

#o'z ichiga oladi // xato: string ko'rinmas

Foydalanish direktivasidan foydalanishingiz kerak:

#o'z ichiga oladi std nom maydonidan foydalanish; // OK: qatorga qarang
string current_chapter = "C++ Ko'rib chiqish";

E'tibor bering, shu tarzda biz global nomlar maydonini "tiqilib qolish" muammosiga qaytamiz, uni hal qilish uchun nomlangan bo'shliqlar mexanizmi yaratilgan. Shuning uchun malakali nomdan foydalanish yaxshidir:

#o'z ichiga oladi // to'g'ri: malakali nom std::string current_chapter = "C++ Umumiy ko'rinish"; yoki selektiv direktiva yordamida: #include std::string nom maydonidan foydalanish; // Ok: satr ko'rinadi
string current_chapter = "C++ Ko'rib chiqish";

Biz oxirgi usuldan foydalanishni tavsiya qilamiz.
Ushbu kitobdagi ko'pgina misollarda nomlar maydoni ko'rsatmalari o'tkazib yuborilgan. Bu kod hajmini kamaytirish uchun amalga oshiriladi, shuningdek, misollarning aksariyati nomlar bo'shliqlarini qo'llab-quvvatlamaydigan kompilyator bilan tuzilganligi sababli - C++ tilidagi yaqinda kiritilgan yangilik etarli. (C++ standart kutubxonasi bilan ishlashda deklaratsiyalardan foydalanish tafsilotlari 8.6-bo'limda muhokama qilinadi.)
Keyingi boblarda biz yana to'rtta sinf yaratamiz: String, Stack, List va Stackning modifikatsiyasi. Ularning barchasi bitta nom maydoniga kiritiladi - Cplusplus_Primer_3E. (Biz 8-bobda nomlar maydoni bilan ishlashni batafsil muhokama qilamiz.)

2.21-mashq

Nom maydoni berilgan

Namespace Exercize (shablon sinf massivi(...);
shablon
bekor chop etish (massiv< EType >);
sinf satri (...)
shablon
sinflar ro'yxati (...);
}

va dastur matni:

Int main() ( const int size = 1024; Massiv kabi (hajmi); Roʻyxat il(hajmi);
// ...
Massiv *pas = yangi massiv (sifatida);
Roʻyxat *pil = yangi ro'yxat (il);
chop etish (*pas);
}

Dastur kompilyatsiya qilmaydi, chunki foydalanilgan sinflar deklaratsiyasi Mashq nomlari maydoniga kiritilgan. yordamida dastur kodini o'zgartiring
(a) malakali nomlar
(b) direktiv yordamida tanlangan
(c) taxallus mexanizmi
(d) direktiv yordamida

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:

  1. Ushbu ta'riflarning sintaksisi XML sintaksisidan farq qiladi (xususan, kengaytirilgan deb ataladigan) Backus-Naur shakli, Kengaytirilgan Backus Naur shakli);
  2. bu ta'riflar etarlicha ifodali emas;
  3. Har bir foydalanuvchi o'z teglarini yaratishi mumkinligi sababli, odamlar turli narsalarga murojaat qilish uchun bir xil element nomlaridan foydalanishlari mumkin. Elementlarning ma'nolari bir xil bo'lsa ham, ularning mumkin bo'lgan mazmuni ta'rifga qarab farq qilishi mumkin. Shunday qilib, bizga elementning o'ziga xos qo'llanilishini aniqlash usuli kerak, ayniqsa, agar biz bir xil hujjatda turli xil lug'atlarni aralashtirsak. Muammoni hal qilish uchun W3C XML nom maydoni deb nomlangan spetsifikatsiyani chiqardi, bu nomlar maydonidagi element kontekstini aniqlash imkonini beradi.
  4. Turli xil DTD ta'riflariga mos keladigan turli manbalardan XML hujjatlarini birlashtirish zarur bo'lgan holatlar mavjud. Misol uchun, bu holat katta hajmdagi axborotni tavsiflashda yuzaga keladi, agar alohida DTDlar butun hajmni qoplash uchun etarli bo'lmasa yoki ularni tushunish qiyin bo'lsa. Bu sizning biznes sherigingiz ma'lumotlarini sizniki bilan birlashtirishga harakat qilganda ham elektron tijorat tizimlarida paydo bo'ladi. Ba'zi ma'lumotlarni standart formatda almashish uchun mavjud DTD ga sozlamalaringizni qo'shishingiz kerak bo'lganda ham vaziyat yuzaga kelishi mumkin. Afsuski, XML tavsiyasi bir nechta DTDlarni bitta hujjatda ularni o'zgartirmasdan yoki yangi DTD yaratmasdan (tashqi havolalar yordamida) birlashtirish usulini ta'minlamaydi.

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:

  • Murakkab muammolarni hal qilish uchun lug'atni yaxshiroq tashkil qilish;
  • Saqlamoq kuchli yozish XML ga va XML dan transformatsiyalar paytidagi ma'lumotlar;
  • Lug'atlarni DTD bilan mumkin bo'lganidan ko'ra aniqroq va moslashuvchan tarzda tasvirlab bering;
  • XML-da lug'at qoidalarini o'qing, tahlilchini murakkablashtirmasdan uning ta'riflariga kiring.

Lug'atlarni aralashtirish

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.

Agar siz boshqa ishlab chiquvchilarning DTDlaridan sizga foydali boʻlgan taʼriflardan foydalansangiz yoki murakkab muammoni tavsiflovchi hujjat yaratish uchun segmentlangan DTDlarni birlashtirganingizda, agar hujjatlaringiz bir xil nomdagi elementlardan foydalansa, siz quyidagi muammolarga duch kelishingiz mumkin. 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.

Nom maydonlari

Nomlar bo'shliqlari foydalanuvchiga ikkita muhim usulda yordam berishi mumkin. Ularning yordami bilan siz:

  • dastur element yoki atribut qaysi manbadan olinganligini ajratib ko‘rsatishiga ishonchni yo‘qotmagan holda ikki yoki undan ortiq manbalardan hujjatlarni birlashtirish;
  • Iloji bo'lsa, foydalanuvchi agentiga hujjat turini aniqlash (DTD) yoki elementlar va atributlarning boshqa tavsifi kabi boshqa materiallarga kirishiga ruxsat bering.

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:

  • Elementdan foydalanishni tavsiflovchi URIga havola.
  • Elementimiz qaysi nom maydonidan kelganligini tushunishga imkon beruvchi taxallus. Bu taxallus element prefiksi shaklida bo‘ladi (masalan, agar noaniq Kitob elementi uchun taxallus katalog bo‘lsa, u holda element chaqiriladi. ).

Nom maydonlaridan foydalanish va e'lon qilish

Nom maydoni deklaratsiyasi

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:

Gorelovo

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 nomdir. 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, xususan, quyidagilardan kelib chiqadi 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.

Qo'llash doirasi

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.

Standart doira

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 talabga javob bermaydigan nomni (prefikssiz) o'z ichiga olgan standart bo'shliqni e'lon qilishingiz kerak.

Malakali doira

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 ularni ishlatish joyida kvalifikatsiya qiling.

Yordam beradi.
PHP-da nomlar maydonini qo'llab-quvvatlash yo'li juda qiyin bo'lgan. Ammo xayriyatki, u PHP 5.3 da tilga qo'shildi va o'shandan beri PHP kodining tuzilishi sezilarli darajada yaxshilandi. Lekin ulardan qanday qilib aniq foydalanishimiz kerak?

Nom maydonlari nima?

"Ismlar maydoni nomini satr sifatida saqlaganingizda teskari chiziqni unutmang!"

Nomlar maydonini har qanday narsani qo'yishingiz mumkin bo'lgan quti deb tasavvur qiling: qalam, o'lchagich, qog'oz varag'i va boshqalar. Bu sizning narsalaringiz. Sizning qutingiz ostida boshqa birovning qutisi joylashgan va uning egasi xuddi shu narsalarni ichida saqlaydi. Bir-biringizning narsalaridan foydalanmaslik uchun siz kimga tegishli ekanligi aniq bo'lishi uchun qutilarni belgilashga qaror qilasiz.

Ilgari ishlab chiquvchilar kodni ajratish uchun sinflari, funktsiyalari va konstantalarida pastki chiziq prefikslaridan foydalanishlari kerak edi. Bu har bir kishi o'z narsalarini belgilab, ularni bitta katta qutida saqlashga teng. Albatta, bu hech bo'lmaganda qandaydir tashkilotdir, lekin bu juda samarasiz.

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.

Siz ulardan foydalanasiz!

Nom maydonlaridan bilvosita foydalanayotganingizni tushunish muhimdir; PHP 5.3 dan boshlab, foydalanuvchi tomonidan belgilangan nomlar bo'shliqlarida e'lon qilinmagan barcha ta'riflar global nomlar maydoniga tushadi.

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.

Nom maydonidan foydalanish ixtiyoriy ekanligini unutmang.
Sizning PHP skriptingiz ularsiz yaxshi ishlaydi va bu xatti-harakat tez orada o'zgarmaydi.

Nomlar maydoni ta'rifi

Nom maydonini o'z ichiga olgan fayl har qanday boshqa koddan oldin uning deklaratsiyasini o'z ichiga olishi kerak. Nom maydonidan oldin e'lon qilinishi mumkin bo'lgan yagona narsa bu declare so'zi bo'lib, fayl kodlashini ko'rsatish uchun e'lon ifodasi nom maydoni deklaratsiyasidan oldin paydo bo'lishi mumkin.

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.

Nomlar bo'shliqlari nomuvofiq ta'riflardan qochish va dastur kodiga ko'proq moslashuvchanlik va tartibni kiritish uchun ishlatiladi.

E'tibor bering, jingalak qavslar butunlay ixtiyoriy. Haqiqatan ham, har bir fayl qoidasi uchun bitta nom maydonidan foydalanish va jingalak qavslarni o'tkazib yuborish kodingizni ancha toza qiladi - ichki kodni cheklashning hojati yo'q.

Subnamespaces

Nomlar bo'shliqlari, xuddi kompyuterdagi fayl tizimidagi kataloglar kabi, ma'lum bir ierarxiyaga amal qilishi mumkin. Subnamespacelar loyiha strukturasini tashkil qilish uchun juda foydali. Misol uchun, agar loyihangiz ma'lumotlar bazasiga kirishni talab qilsa, siz ma'lumotlar bazasidan istisno ishlov beruvchisi va ulanishni qayta ishlash kodini Ma'lumotlar bazasi nom maydonining pastki nom maydoniga joylashtirishingiz mumkin.

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."

Nom maydonidan chaqiruv kodi

Agar siz ob'ektning yangi nusxasini yaratmoqchi bo'lsangiz, funktsiyani chaqirmoqchi bo'lsangiz yoki turli nomlar bo'shliqlaridan doimiylardan foydalanmoqchi bo'lsangiz, siz teskari chiziqdan foydalanasiz. Nom maydoni nomining uchta turi mavjud:
  • Noma'lum nom
  • Malakali ism
  • To'liq malakali ism

To'liq bo'lmagan ism

Bu sinf, funksiya yoki doimiyning nomi va hech qanday nom maydoniga havolani o'z ichiga olmaydi. Nom maydonlari bilan endigina ishlashni boshlaganlar uchun bu umumiy nuqtai nazardir.

To'liq ism

Biz subnamespace ierarxiyasiga shu tarzda kiramiz; teskari chiziq bilan ajratilgan.

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.

Mutlaq ism

To'liq va qisman ismlar siz hozir bo'lgan nom maydoniga nisbatan ishlatiladi. Ulardan faqat shu darajadagi kirishni aniqlash yoki nomlar maydoni ierarxiyasiga chuqurroq kirish uchun foydalanish mumkin.

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.

"; }

Dinamik qo'ng'iroqlar

PHP dinamik dasturlash tilidir; shuning uchun siz ushbu funksiyadan nom maydonidan kod chaqirish uchun foydalanishingiz mumkin. Bu dinamik sinf nomidan foydalanish yoki uning nomini saqlash uchun o'zgaruvchidan foydalanib dinamik faylni ulash bilan bir xil. PHP nom ajratuvchisi satrlarda bir xil meta-belgilardan foydalanadi. Nom maydoni nomini satr sifatida saqlaganingizda teskari chiziq haqida unutmang!

nom maydoni kalit so'zi

Namespace kalit so'zi nafaqat nomlar maydonini aniqlash uchun ishlatiladi, balki u joriy nomlar maydoniga qo'ng'iroq qilish uchun ham ishlatilishi mumkin, funktsional jihatdan sinflar uchun self kalit so'ziga o'xshash.

__NAMESPACE__ doimiy

Xuddi self kalit so'zini joriy sinf nomini aniqlash uchun ishlatib bo'lmagani kabi, nomlar maydoni kalit so'zidan joriy nom maydoni uchun foydalanilmaydi. Shuning uchun biz __NAMESPACE__ doimiysidan foydalanamiz

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.

Import qiling yoki taxallus ism yarating

nom maydonlarida foydalanish shart emas

PHP dagi nom maydonlarining muhim xususiyati tashqi mutlaq nomga murojaat qilish qobiliyatidir taxallus, yoki import qilish.

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

Uni qanday ishlatish kerak

Mutlaq nom qisqaroq nomga bog'lanishi mumkin, shuning uchun uni har safar ishlatmoqchi bo'lganingizda uning mutlaq nomini yozishingiz shart emas. Taxallusni yaratish yoki import qilish ota-ona yoki global nom maydonida amalga oshirilishi kerak. Buni usul yoki funksiya doirasida qilishga urinish noto‘g‘ri sintaksis.

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.

Xulosa

Nomlar bo'shliqlari ta'riflar to'qnashuvining oldini olish va dastur kodiga ko'proq moslashuvchanlik va tashkiliylikni kiritish uchun ishlatiladi. Esda tutingki, sizdan nom bo'shliqlaridan foydalanish shart emas; Bu xususiyat ob'ektga yo'naltirilgan yondashuv bilan birgalikda qo'llaniladi. Umid qilamanki, siz (kelajakdagi) PHP loyihangizni nomlar maydonidan foydalanib keyingi bosqichga olib chiqishni ko'rib chiqasiz.