c-д нэрийн орон зай гэж юу вэ. Ангиуд болон нэрийн орон зай. Нэрийн орон зайнаас дуудлагын код

Ангиуд ба нэрсийн орон зай

.NET Framework ангиуд

Удирддаг код бичихийн хамгийн том давуу тал нь наад зах нь хөгжүүлэгчийн үүднээс авч үзвэл та үүнийг ашиглах боломжтой болно. .NET үндсэн ангийн номын сан .

.NET-ийн үндсэн ангиуд нь Windows API ашиглан өмнө нь шийдэж болох бараг бүх асуудлыг шийдэх боломжийг олгодог, удирддаг кодын ангиудын асар их цуглуулгыг өгдөг. Эдгээр бүх ангиуд нь нэг удамшлын дагуу ижил IL объектын загварыг дагадаг. Энэ нь та .NET-ийн аль ч үндсэн ангиас объект үүсгэх эсвэл тэдгээрээс өөрийн ангиудыг өвлөн авах боломжтой гэсэн үг юм.

.NET-ийн үндсэн ангиудыг ялгаатай болгодог зүйл нь тэдгээр нь ойлгомжтой, хэрэглэхэд хялбар байхаар бүтээгдсэн байдаг. Жишээлбэл, thread эхлүүлэхийн тулд та ангийн Start() аргыг дуудах хэрэгтэй Thread. TextBox объектыг ашиглах боломжгүй болгохын тулд объектын Enabled шинж чанарыг худал болгож тохируулна уу. Сангуудыг ашиглахад хялбар Visual Basic болон Java хөгжүүлэгчдэд танил болсон энэхүү арга нь GetDIBits(), RegisterWndClassEx(), IsEqualIID() зэрэг API функцуудтай олон жил тэмцсэн C++ хөгжүүлэгчдэд асар их тайвшрал болно. цонхны бариулыг дамжуулах шаардлагатай олон функцууд.

Гэсэн хэдий ч C++ хөгжүүлэгчид Windows API-ийн бүрэн багцад хялбархан хандах боломжтой байсан бол Visual Basic 6 болон Java хөгжүүлэгчид өөрсдийн хэлнээсээ ханддаг үйлдлийн системийн үндсэн функцээр хязгаарлагддаг. .NET-ийн үндсэн ангиуд нь Visual Basic болон Java номын сангуудыг ашиглахад хялбар, Windows API функцийн багцыг харьцангуй бүрэн хамардаг. Windows-ийн олон функцийг үндсэн ангиудаар дамжуулан ашиглах боломжгүй бөгөөд эдгээр тохиолдолд та API функцийг ашиглах хэрэгтэй болно, гэхдээ ерөнхийдөө энэ нь зөвхөн хамгийн чамин функцүүдэд хамаарна. Өдөр тутмын хэрэглээний хувьд үндсэн ангиудын багц нь ерөнхийдөө хангалттай байх болно. Гэхдээ хэрэв та API функцийг дуудах шаардлагатай бол .NET гэж нэрлэгддэг функцийг өгдөг платформыг дуудах механизм, энэ нь өгөгдлийн төрлийг зөв хувиргах баталгааг өгдөг тул одоо энэ даалгавар нь C#, C++ эсвэл Visual Basic 2010 хэл дээр ямар хэл дээр бичигдсэнээс үл хамааран C++ кодоос эдгээр функцийг шууд дуудахаас илүү хэцүү биш юм.

Нэрийн орон зай

Нэрийн орон зайЭнэ нь .NET-д анги хоорондын зөрчилдөөнийг нэрлэхээс зайлсхийх арга юм. Эдгээр нь хэрэглэгчийг төлөөлөх ангиудыг тодорхойлж, түүнийг Хэрэглэгч гэж нэрлэх, дараа нь өөр хэн нэгэн үүнийг хийх (энэ нь нэлээд түгээмэл хувилбар) нөхцөл байдлаас урьдчилан сэргийлэх зорилготой юм.

Нэрийн орон зай нь өгөгдлийн төрлүүдийн бүлгээс өөр зүйл биш боловч нэрийн орон зайн доторх бүх өгөгдлийн төрлүүдийн нэрийг автоматаар нэрийн талбарын нэрээр угтдаг нөлөө үзүүлдэг. Нэрийн орон зайг бие биендээ байрлуулж болно. Жишээлбэл, ихэнх ерөнхий зориулалтын .NET үндсэн ангиуд нэрийн талбарт байдаг Систем. Суурь анги МассивЭнэ орон зайд хамаарах тул бүтэн нэр нь Систем.Массив.

.NET платформ нь бүх нэрийг нэрийн зайд зарлахыг шаарддаг; жишээ нь та ангиа тавьж болно Миний ангинэрийн орон зай руу Миний компани. Дараа нь энэ ангийн бүтэн нэр иймэрхүү харагдах болно MyCompany.MyClass.

Хэрэв нэрийн орон зайг тодорхой заагаагүй бол төрөл нь нэргүй глобал нэрийн орон зайд нэмэгдэх болно гэдгийг анхаарна уу.

Ихэнх тохиолдолд Майкрософт дор хаяж хоёр нэрийн орон зайг ашиглахыг зөвлөж байна: эхнийх нь танай компанийн нэр, хоёр дахь нь тухайн ангид хамаарах технологи эсвэл програм хангамжийн багцын нэр тул дараах байдалтай харагдана: MyCompany.SomeNamespace .Миний анги. Ихэнх тохиолдолд энэ арга нь таны хэрэглээний ангиудыг бусад компаниудын хөгжүүлэгчдийн бичсэн ангийн нэрстэй зөрчилдөхөөс хамгаалах болно.

Дараах хүснэгтэд .NET-д санал болгож буй зарим (гэхдээ мэдээж бүгд биш) нэрийн талбаруудын товч жагсаалт бөгөөд эдгээрийг функцээр нь бүлэг болгон хуваасан:

.NET Framework түлхүүр нэрийн орон зай
.NET дахь нэрийн орон зай Тодорхойлолт
Систем Нэрийн талбар дотор Системдотоод өгөгдөл, математик, санамсаргүй тоо үүсгэх, орчны хувьсагч, хог хаягдал цуглуулах зэрэг олон хэрэгцээтэй төрлүүд, түүнчлэн түгээмэл хэрэглэгддэг хэд хэдэн үл хамаарах зүйлүүд, шинж чанаруудыг агуулдаг.
Систем.Цуглуулга
Систем.Цуглуулга.Ерөнхий
Эдгээр нэрийн талбарууд нь хэд хэдэн төрлийн контейнер, түүнчлэн тусгай цуглуулга үүсгэх боломжийг олгодог хэд хэдэн үндсэн төрөл, интерфейсийг агуулдаг.
Систем.Өгөгдөл
System.Data.Common
System.Data.EntityClient
System.Data.SqlClient
Эдгээр нэрийн орон зайг ADO.NET ашиглан мэдээллийн сантай харилцахад ашигладаг
System.IO
System.IO.Compression
System.IO.Ports
Эдгээр зай нь файлын I/O, өгөгдлийг шахах, портыг удирдахад зориулагдсан олон төрлийг агуулдаг.
Систем. тусгал
System.Reflection.Emit
Эдгээр нэрийн талбарууд нь ажиллах цагийн төрлийг илрүүлэх, динамик төрлийг үүсгэхийг дэмждэг төрлүүдийг агуулдаг
System.Runtime.InteropServices Энэ нэрийн талбар нь .NET төрлүүдийг "удирдлагдаагүй код"-той (C-д суурилсан DLL болон COM сервер гэх мэт) болон эсрэгээр харилцах боломжийг олгох арга хэрэгслийг агуулдаг.
Систем.Зураг
System.Windows.Forms
Эдгээр нэрийн талбарууд нь үндсэн .NET (Windows Forms) график хэрэгслийн багцыг ашиглан ширээний програмуудыг бүтээхэд ашигладаг төрлүүдийг агуулдаг.
Систем.Windows
System.Windows.Controls
Систем.Windows.Shapes
Орон зай Систем.Windowsнь Windows Presentation Foundation (WPF) график хэрэгслүүдийн багцыг төлөөлдөг эдгээр хэд хэдэн нэрийн орон зайн үндэс юм.
System.Linq
System.Xml.Linq
System.Data.DataSetExtensions
Эдгээр нэрийн орон зай нь LINQ API ашиглан програмчлал хийх үед хэрэглэгддэг төрлүүдийг агуулдаг
Систем.Вэб Энэ нэрийн орон зай нь танд ASP.NET вэб програм үүсгэх боломжийг олгодог олон тооны нэг юм
System.ServiceModel Энэ нэрийн орон зай нь Windows Communication Foundation (WCF) API ашиглан тархсан програмуудыг үүсгэхэд ашиглаж болох олон зүйлийн нэг юм.
System.Workflow.Runtime
Систем.Ажлын урсгал.Үйл ажиллагаа
Эдгээр хоёр нэрийн талбар нь Windows Workflow Foundation (WWF) API-г ашиглан ажлын урсгалыг идэвхжүүлсэн програмуудыг бүтээхэд ашигладаг төрлүүдийг агуулсан олон нэрийн орон зайн гол төлөөлөгч юм.
Систем. Threading
Систем. Threading. Tasks
Энэ нэрийн талбар нь олон процессоруудад ажлын ачааллыг хуваарилах боломжтой олон урсгалтай програмуудыг бүтээх олон төрлийг агуулдаг.
Систем.Аюулгүй байдал Аюулгүй байдал нь .NET ертөнцөд угаасаа байдаг. Хамгаалалттай холбоотой нэрийн орон зай нь зөвшөөрөл, криптографийн аюулгүй байдал гэх мэт олон төрлийг агуулдаг.
System.Xml Энэхүү XML-д суурилсан нэрийн орон зай нь XML өгөгдөлтэй харилцахад ашиглаж болох олон төрлийг агуулдаг

Microsoft-ын эх орон зайн үүрэг

Хүснэгт дэх жагсаалтыг шалгаж үзэхэд Системийн нэрийн орон зай нь зохих тооны нэрийн орон зайн үндэс (жишээ нь System.IO, System.Data гэх мэт) болохыг анзаарахад хялбар байсан. Гэсэн хэдий ч, үндсэн ангиллын номын сан нь Системээс гадна хэд хэдэн дээд түвшний язгуур нэрийн орон зайг санал болгодог бөгөөд эдгээрээс хамгийн ашигтай нь юм. Microsoft-ын нэрийн орон зай.

Namespace std гэж юу вэ гэсэн асуултад хариулахдаа юуны өмнө тайлбарласан нэр томъёо нь англи хэлнээс орчуулбал янз бүрийн таних хэлбэрийг тодорхойлоход шаардлагатай мэдэгдлийн хамрах хүрээ болох нэрийн орон зай гэсэн утгатай болохыг тэмдэглэх нь зүйтэй. функцууд болон хамааралтай/бие даасан хувьсагчид.

Үүний ачаар хэд хэдэн хувьсагч ижил утгыг авах тохиолдол байдаг тул нэрсийн хооронд зөрчилдөөн байхгүй болно. Ихэнхдээ энэ нь өөр өөр номын сангууд бий болсон үед тохиолддог.

Тодорхойлогч нь бие биентэйгээ холбоотой чөлөөтэй байдаг. Бүтэн нэрийн форматыг ашиглахдаа тэд бие даасан гишүүдэд үнэ төлбөргүй хандах боломжтой.

Үүний тулд энэ нь туйлын чухал юмИнгэснээр тухайн объект нь namespace std ашиглан нэрийн бүтэн хэлбэрийг агуулна. Энэ нь сансрын нэр дээр байрлуулахдаа тунхаглал хэрхэн харагдахыг нүдээр ойлгоход чухал юм.

Зураг нь кодчилолд хандах хандалтын хэд хэдэн хувилбарыг харуулж байна. хашаан дотор болон гадна байрлах:

1 Энэ нь иймэрхүү харагдаж байна бүтэн нэр:

2 Одоо байгаа зар сурталчилгааг нөхөхийн тулд, ашиглан нэмэх:

3 Одоо байгаа бүх ID-г нэмэхийн тулд, зохих удирдамжийг ашиглана уу:

Удирдамжийг ашиглах

Ашиглах заавар нь нэрийн талбарт орсон бүх боломжтой нэрийг ашиглах боломжийг олгодог.

Сонгогчийг зааж өгөх шаардлагагүй.

Та cpp форматтай файлыг ашиглах ёстой.Гэсэн хэдий ч чухал нөхцөл бол хэд хэдэн танигч байх явдал юм.

Зөвхөн хоёр нэр байгаа тохиолдолд энгийн нэр үүсгэх нь хамааралтай болно.

Дараа нь та зөвхөн шаардлагатай танигчийг нэмж, үлдсэнийг нь үлдээж болно.

Хэрэв локал хувьсагчийн нэр ба үндсэн хувьсагчийн нэр давхцаж байвал энэ тохиолдолд эхнийх нь далд хандалттай байх болно гэдгийг анхаарах нь чухал юм.

Ижил нэртэй хувьсагч үүсгэх нь хууль бус гэдгийг анхаарна уу.

Зөвлөгөө!Ашиглахад хялбар болгох үүднээс ашиглах зааврыг cpp форматтай файлын дээд талд эсвэл эсрэгээр үүсгэсэн номын сан дотор байрлуулж болно.

Өөртөө хамгийн тохь тухтай ажиллах нөхцлийг бүрдүүлэхийн тулд та шаардлагатай файлуудыг байрлуулах ажлыг хийж болно.

Онцын шаардлагагүй бол ашиглах зааврыг байрлуулж болохгүй H форматын файлын толгой хэсэгт.

Энэ нь энэ үйлдлийг хийснээр бүх танигч нь харагдахуйц талбарт идэвхтэй болж, зарим нэрс хоорондоо зөрчилдөх магадлалыг нэмэгдүүлдэгтэй холбоотой юм.

Файлуудын хувьд бүтэн нэрийг ашиглах нь хамгийн сайн шийдэл юм.

Хэрэв тэдгээр нь хэтэрхий урт болсон бол та товчилсон үгсийг хоч нэр хэлбэрээр ашиглаж болно.

Нэрийн орон зайн мэдэгдэл

Зар сурталчилгааг файлын нэрээр байршуулдаг заншилтай. Хэрэв заасан функцийг гүйцэтгэх нь тусдаа номын сан эсвэл файлд байрладаг бол бүтэн нэрийг тодорхойлох нь чухал юм.

Бид ямар үйлдлийн тухай ярьж байгааг ойлгохын тулд энэ нь үнэ цэнэтэй юм дараах зургийг үзээрэй:

cpp форматын contosodata функцийг хэрэгжүүлэхийн тулд тухайн тохиолдолд бүтэн нэрийг ашиглах нь чухал юм заавар хамгийн эхэнд байх үед:

Namespace std ашиглаж байна. нэг файлд байрлах хэд хэдэн хэсэгт нэгэн зэрэг зар сурталчилгаа агуулж болно.

Хөрвүүлэгчийн ачаар өгөгдлийг боловсруулж байх үед бүх элементүүдийг нэгтгэдэг.

Тиймээс, жишээлбэл, std. нь дүрмээр бол стандарт төрлийн хүртээмжтэй номын санд байрлах хандах боломжтой файлуудын бүх толгой хэсэгт зарлагдсан байдаг.

Бүрэн эрх бүхий нэрээр томилогдсон гишүүдийг зөвхөн нэрийн орон зайд төдийгүй тодорхой мэргэшилтэй бол гадна талд нь тодорхойлж болно.

Тодорхойлолтын хувьд энэ нь үүсгэгдсэн нэрийн талбарт мэдэгдлийн дараа ирэх ёстой.

Харааны жишээ болгон дараах зурагт анхаарлаа хандуулаарай.

Ихэнх тохиолдолд энэ алдаа нь тодорхойлолтын дарааллыг зөрчсөн эсвэл бүтэн нэрний бүрэлдэхүүн хэсгүүдийг бэлэн объектуудад нэн даруй оруулсан тохиолдолд гарч ирдэг.

Тодорхой нэрийн талбарт күүкиг зарлаагүй тохиолдолд, Энэ нь албан ёсоор дэлхийн төрлийн орон зайд хамаарна.

Зөвлөгөө!Онцын шаардлагагүй бол гишүүдийг глобал төрлийн орон зайд оруулахаас зайлсхийхийг зөвлөж байна.

Дүрэмд мэдэгдэхүйц үл хамаарах зүйл нь зөвхөн байж болно гол сонголт, өргөн уудам орон зайд заавал оруулах гэсэн үг.

Глобал төрлийн танигч үүсгэхийн тулд та бүтэн нэр хэлбэрээр харгалзах харагдахуйц функцийг ашиглах хэрэгтэй.

Энэ үйлдэл нь өөр нэрийн орон зайд байгаа нэг танигчийн өвөрмөц шинж чанарыг бий болгоход тусална.

Энэ нь кодыг ойлгоход тусална.

Space std.

Орон зай нь үүрлэсэн хэлбэртэй байж болно гэдгийг тэмдэглэх нь зүйтэй.

Хэрэв энгийн шигтгээ гэж байгаа бол энэ нь бүхэл бүтэн орон зайд хязгааргүй шинж чанартай байна.

Эцэг эхийн гишүүдийн тухай яривал тэдэнд тийм үүрэг байхгүй.

Өргөтгөхийн тулд суурилуулсан хавсралт шаардлагатай.

Илүү нарийн тодорхойлолт, ойлголт авахын тулд, дараах зурагт анхаарлаа хандуулаарай.

Цаашид хэрэгжүүлэхэд зориулсан мэдээллийг багтаасан бөгөөд энэ нь энгийн үүрлэсэн орон зайн нэг хэсэг болж, эх орон зайд нээлттэй төрлийн интерфейсийн үүрэг гүйцэтгэдэг.

Харьцуулалт нь стандарт төрлийн ердийн хавсралтууд, эцэг эхийн нэрийн орон зайд суурилагдсан гишүүд юм.

Үүний үр дүнд та аргументуудын хамаарал үүсэх зарим төрлийн хэт ачаалалтай функцүүдийн хайлтыг ашиглаж болно.

Боолт хэрхэн хийгдсэн жишээг харахын тулд, Дараах жишээг дурдах нь зүйтэй.

Дараах зураг нь эх орон зайн загварт мэргэшүүлэх үйл явцыг харуулж байна. баригдсан төрлийн түр зуурын орон зайд зарласан:

Суурилуулсан орон зайг ашигласнаар стандарт номын сан дахь интерфейсийн янз бүрийн хувилбаруудыг удирдах боломжтой.

Энэ нь нэг эцэг эхийн орон зайг үүсгэж, танилцуулсан интерфейс бүрийг багтаах боломжтой.

Гэхдээ энэ нь эцэг эхийн хуваалцсан зайд хавсралтын форматтай байх ёстой.

Дараа нь үйлчлүүлэгчийн кодыг шинэ хослолд автоматаар онооно.

Хуучин хувилбарыг ашиглаж дассан хэрэглэгчид ямар ч асуудалгүйгээр үргэлжлүүлэн ашиглах боломжтой.

Үүнийг хийхийн тулд та хавсралтын бүрэн замыг үүсгэх хэрэгтэй.

Эхний мэдэгдлийг зохион байгуулахын тулд та шугаман товчлуурыг ашиглах ёстой.

Интерфэйсийн хоёр сонголтын дараах жишээг харцгаая, тус бүр нь зайтай. Үйлчлүүлэгчийн код нь шинэ номын санг ашиглах чадвартай.

Үйл явцыг төсөөлөхийн тулд Дараах зураг руу шилжье.

Бүх нэрс нь маш өвөрмөц байх ёстой тул урт нь мэдэгдэхүйц нэмэгддэг.

Гэхдээ энд ашиглах удирдамжийг ашиглах боломжгүй.

Зөвхөн нэрийн орон зайд өөр нэр үүсгэх боломжтой.

Энэ тохиолдолд дараах жишээг авч үзье.

Мөн энгийн орон зай үүсгэх боломжтой боловч түүнд өөр нэр өгөөгүй.

Ийм нутаг дэвсгэрийн спектрийг нэргүй гэж нэрлэдэг.

Дүрмээр бол энэ нь мэдэгдэлд байгаа гишүүд бусад объектод кодлоход үл үзэгдэх байх ёстой нөхцөлд ашиглагддаг.

Бүхэл бүтэн бүтэц, бүх танигчийг харах боломжтой боловч үүссэн орон зайн гадна үл үзэгдэх болно.

Үүнийг тэмдэглэх нь зүйтэй, нэрийн орон зай өөрөө блокийн гадна харагдахгүй байх тул хэрэглэгч бүр энэ нарийн ширийн зүйлийг урьдчилан анхаарч үзэх хэрэгтэй.

Ихэвчлэн Visual C++ дээр ажилладаг хүмүүст мэдлэгийн хэрэглээ шаардлагатай байдаг.

Өндөр чанартай жишээнүүдийг ашигласнаар энэ сэдвийг ойлгоход илүү хялбар байх болно.

Бид өмнөх жишээн дээр боловсруулсан Array ангиа хуваалцахыг хүсч байна гэж бодъё. Гэсэн хэдий ч бид энэ асуудлыг шийдвэрлэхдээ ганцаараа байгаагүй; Магадгүй хэн нэгэн Intel-ийн нэг хэлтэст ижил нэртэй анги үүсгэсэн байж магадгүй юм. Эдгээр ангиудын нэр ижил тул боломжит хэрэглэгчид хоёуланг нь зэрэг ашиглах боломжгүй, аль нэгийг нь сонгох ёстой. Ангийн нэр дээр хөгжүүлэгчдийг таньсан тэмдэгт мөрийг нэмснээр энэ асуудал шийдэгдэнэ.

Class Cplusplus_Primer_Third_Edition_Array ( ... );

Мэдээжийн хэрэг, энэ нь нэрний өвөрмөц байдлыг баталгаажуулахгүй, гэхдээ энэ нь хэрэглэгчийг энэ асуудлаас аврах болно. Гэсэн хэдий ч ийм урт нэрийг ашиглах нь ямар тохиромжгүй вэ!
C++ стандарт нь нэртэй тохирох асуудлыг шийдвэрлэх механизмыг санал болгодог нэрийн орон зай. Програм хангамж үйлдвэрлэгч бүр өөрийн нэрийн талбарт өөрийн анги, функц болон бусад объектуудыг боож болно. Жишээлбэл, манай Array ангийн мэдэгдэл иймэрхүү харагдаж байна.

Нэрийн орон зай Cplusplus_Primer_3E (загвар анги Массив(...); )

Namespace түлхүүр үг нь манай ангийн харагдах байдлыг тодорхойлдог нэрийн орон зайг зааж өгдөг бөгөөд энэ тохиолдолд Cplusplus_Primer_3E гэж нэрлэгддэг. Бидэнд өөр өөр нэрийн талбарт байрлуулсан бусад хөгжүүлэгчдийн ангиуд байна гэж бодъё:

Нэрийн орон зай IBM_Canada_Laboratory (загвар анги Массив(...);
ангийн матриц(...);
}
нэрийн орон зай Disney_Feature_Animation (
анги цэг(...);
загвар анги Массив(...);
}

Анхдагч байдлаар, тодорхой нэрийн орон зайгүй зарласан объектууд програмд ​​харагдана; тэд харьяалагддаг дэлхийннэрийн орон зай. Өөр орон зайнаас объект руу хандахын тулд та нэрийн орон зай тодорхойлогч болон хамрах хүрээний нарийвчлалын оператор (::)-аар тусгаарлагдсан объектын танигчаас бүрдэх зохих нэрийг ашиглах ёстой. Дээрх жишээнүүдийн объект руу залгах нь дараах байдалтай байна.

Cplusplus_Primer_3E::Массив текст; IBM_Canada_Laboratory::Матрицын дэвсгэр; Disney_Feature_Animation::Цэг эх (5000,5000);

Ашиглахад хялбар болгохын тулд та нэрийн орон зайд өөр нэр оноож болно. Хоч нь богино, санахад хялбар байхаар сонгосон. Жишээлбэл:

// aliass namespace LIB = IBM_Canada_Laboratory; нэрийн орон зай DFA = Disney_Feature_Animation;
int main()
{
LIB::Массив ia(1024);
}

Нэрийн орон зайн хэрэглээг нуун дарагдуулахын тулд нэрийн нэрийг мөн ашигладаг. Холбогдох нэрийг орлуулснаар бид холбогдох функц, ангиудын багцыг өөрчлөх боломжтой бөгөөд бусад бүх талаараа програмын код ижил хэвээр байх болно. Дээрх жишээн дээрх зөвхөн нэг мөрийг засснаар бид огт өөр массивын тодорхойлолтыг олж авна.

Нэрийн орон зай LIB = Cplusplus_Primer_3E; int main() ( LIB :: массив ia(1024); )

Мэдээжийн хэрэг, үүнийг хийх боломжтой байхын тулд эдгээр нэрийн талбарт зарласан классын интерфейс болон функцуудын хооронд яг таарч байх ёстой. Disney_Feature_Animation-ийн Array класс нь хэмжээ гэсэн нэг параметртэй бүтээгчгүй гэж төсөөлье. Дараа нь дараах код нь алдаа гаргах болно.

Нэрийн орон зай LIB = Disney_Feature_Animation;
int main()
{
LIB::Массив ia(1024);
}

Бүр илүү тохиромжтой арга бол зарим нэрийн талбарт тодорхойлсон объектуудад хандахын тулд энгийн, шаардлага хангаагүй нэрийг ашиглах явдал юм. Үүнийг ашиглах заавар байдаг:
#"IBM_Canada_Laboratory.h"-г оруулах

IBM_Canada_Laboratory нэрийн зайг ашиглах;
int main()
{
Матрицын дэвсгэр(4,4);
// IBM_Canada_Laboratory::Array
Массив ia(1024);
// ...
}

IBM_Canada_Laboratory нэрийн орон зай программд харагдах болно. Та орон зайг бүхэлд нь биш, харин доторх нэрсийг харагдуулах боломжтой (зааврыг ашиглан сонгон):

#нэрийн орон зайг ашиглан "IBM_Canada_Laboratory.h"-г оруулах IBM_Canada_Laboratory::Matrix;
// зөвхөн матриц харагдах болно
int main()
{
// IBM_Canada_Laboratory::Matrix
Матрицын дэвсгэр(4,4); // Алдаа: IBM_Canada_Laboratory::Array харагдахгүй байна
Массив ia(1024);
// ... }

Өмнө дурьдсанчлан, C++ стандарт номын сангийн бүх бүрэлдэхүүн хэсгүүдийг std нэрийн талбарт зарласан болно. Тиймээс стандарт функц, ангиудыг шууд ашиглахад толгой файлыг оруулахад хангалттай биш юм:

#оруулна // алдаа: мөр харагдахгүй байна

Та ашиглах зааврыг ашиглах ёстой:

#оруулна namespace std ашиглах; // За: мөрийг харна уу
string current_chapter = "C++ тойм";

Гэсэн хэдий ч ийм байдлаар бид нэрлэсэн орон зайн механизмыг бий болгохын тулд дэлхийн нэрийн орон зайг "бөглөх" асуудал руу буцаж орсныг анхаарна уу. Тиймээс шаардлага хангасан нэрийг ашиглах нь дээр:

#оруулна // зөв: шаардлага хангасан нэр std::string current_chapter = "C++ тойм"; эсвэл сонгох удирдамж: #include нэрийн орон зайг ашиглах std::string; // За: мөр харагдаж байна
string current_chapter = "C++ тойм";

Бид сүүлчийн аргыг ашиглахыг зөвлөж байна.
Энэ номын ихэнх жишээнүүдэд нэрийн зайн зааврыг орхигдуулсан байна. Энэ нь кодын хэмжээг багасгахын тулд хийгдсэн бөгөөд мөн ихэнх жишээнүүдийг нэрийн зайг дэмждэггүй хөрвүүлэгчээр эмхэтгэсэн тул C++-д сүүлийн үеийн шинэчлэл хангалттай. (С++ стандарт номын сантай ажиллахдаа мэдэгдлийг ашиглах талаарх дэлгэрэнгүй мэдээллийг 8.6-р хэсэгт авч үзнэ.)
Дараах бүлгүүдэд бид өөр дөрвөн анги үүсгэх болно: String, Stack, List болон Stack-ийн өөрчлөлт. Тэд бүгд нэг нэрийн талбарт хаагдах болно - Cplusplus_Primer_3E. (Бид 8-р бүлэгт нэрийн орон зайтай ажиллах талаар илүү дэлгэрэнгүй авч үзнэ.)

Дасгал 2.21

Нэрийн зай өгсөн

Namespace Exercize (загвар анги Массив(...);
загвар
хүчингүй хэвлэх (массив< EType >);
анги мөр (...)
загвар
ангийн жагсаалт(...);
}

болон хөтөлбөрийн текст:

Int main() ( const int size = 1024; Массив зэрэг (хэмжээ); Жагсаалт il(хэмжээ);
// ...
Массив *pas = шинэ массив (зэрэг);
Жагсаалт *pil = шинэ жагсаалт (il);
хэвлэх(*pas);
}

Ашигласан ангиудын мэдэгдлүүд Дасгалын нэрийн талбарт хавсаргасан тул програм хөрвүүлдэггүй. Програмын кодыг ашиглан өөрчлөх
(а) шаардлага хангасан нэрс
(б) удирдамж ашиглан сонгох
(в) нэрийн механизм
(г) удирдамжийг ашиглах

Тэмдэглэл: Энэ хэсэгт нэрийн орон зайн хэрэглээ болон зарлалыг тайлбарласан болно. RDF, XML-Data, Document Content Description (DCD), Schema for Object-oriented XML (SOX), Document Definition Markup Language (DDML, өмнө нь XSchema) зэрэг үндсэн шинж чанаруудыг өгсөн болно.

Бид өмнө нь DTD-ийн тодорхойлолтуудын зарим сул талуудыг тодорхойлсон бөгөөд тэдгээр нь дараахь байдалтай холбоотой.

  1. Эдгээр тодорхойлолтуудын синтакс нь XML-ийн синтаксаас ялгаатай (ялангуяа өргөтгөсөн гэж нэрлэгддэг) Backus-Naur хэлбэр, Өргөтгөсөн Backus Naur маягт);
  2. эдгээр тодорхойлолтууд хангалттай илэрхийлэгдэхгүй;
  3. Хэрэглэгч бүр өөрийн гэсэн шошго үүсгэж чаддаг тул хүмүүс өөр өөр зүйлд хандахдаа ижил элементийн нэрийг ашиглах магадлал өндөр байдаг. Элементүүдийн утга ижил байсан ч тэдгээрийн боломжит агуулга нь тодорхойлолтоос хамааран өөр өөр байж болно. Тиймээс бидэнд элементийн тодорхой хэрэглээг тодорхойлох арга хэрэгтэй, ялангуяа нэг баримт бичигт янз бүрийн үгсийн санг холих тохиолдолд бидэнд хэрэгтэй. Асуудлыг шийдвэрлэхийн тулд W3C нь XML Namespaces нэртэй тодорхойлолтыг гаргасан бөгөөд энэ нь танд нэрийн орон зай дахь элементийн контекстийг тодорхойлох боломжийг олгодог.
  4. Төрөл бүрийн DTD-ийн тодорхойлолтод тохирсон өөр өөр эх сурвалжаас XML баримт бичгийг нэгтгэх шаардлагатай нөхцөл байдал байдаг. Жишээлбэл, хэрэв DTD нь бүхэл бүтэн эзлэхүүнийг хамрахад хангалтгүй эсвэл ойлгоход хэцүү бол их хэмжээний мэдээллийг тайлбарлах үед ийм нөхцөл байдал үүсдэг. Энэ нь таны бизнесийн түншийн өгөгдлийг таныхтай нэгтгэхийг оролдох үед цахим худалдааны системд тохиолддог. Зарим мэдээллийг стандарт форматаар солилцохын тулд одоо байгаа DTD-д тохиргоогоо нэмэх шаардлагатай үед нөхцөл байдал үүсч болно. Харамсалтай нь, XML зөвлөмж нь олон DTD-г нэг баримт бичигт өөрчлөх эсвэл шинэ DTD үүсгэхгүйгээр (гадны лавлагаа ашиглан) нэгтгэх арга замыг өгдөггүй.

Энэ бүлэг нь дараах хоёр ойлголтыг хамарна - нэрийн орон зайболон XML схемүүд. Нэрийн орон зай нь XML хөгжүүлэгчдэд нарийн төвөгтэй асуудлыг жижиг хэсгүүдэд хувааж, олон үг хэллэгийг нэг баримт бичигт нэгтгэн бүрэн дүрслэх боломжийг олгодог. Толь бичгийг зохион бүтээгчид схемүүдийг ашиглан DTD-ээс илүү нарийн тодорхойлолтыг бий болгож, XML синтакс ашиглан хийдэг.

Эдгээр хоёр хэрэгсэл нь XML-г ашиглах үед үүсдэг нарийн төвөгтэй асуудлыг шийдвэрлэхэд тусалдаг. Нэрийн орон зай ба схемүүд нь XML дизайнерууд болон программистуудад дараахь зүйлийг хийх боломжийг олгодог.

  • Нарийн төвөгтэй асуудлыг шийдвэрлэхийн тулд үгсийн санг илүү сайн зохион байгуулах;
  • Хадгалах хүчтэй бичих XML рүү болон XML-ээс хувиргах үеийн өгөгдөл;
  • Үгийн санг DTD-тэй харьцуулахад илүү нарийвчлалтай, уян хатан байдлаар дүрслэх;
  • Толь бичгийн дүрмийг XML хэлээр уншиж, задлан шинжлэгчийг хүндрүүлэхгүйгээр түүний тодорхойлолтод хандах боломжтой.

Толь бичгүүдийг холих

Толь бичиг зохиохдоо дэлхийн асуудлыг хэд хэдэн бүрэлдэхүүн хэсэг болгон хуваах нь утга учиртай байж болох юм. Энэ нь том асуудлыг олон үгийн сан болгон хуваах арга замыг шаарддаг. Гэсэн хэдий ч шийдвэрлэх ёстой асуудал бол тусдаа DTD-г нэг баримт бичгийн үндсэн хэсэгт нэгтгэх явдал юм. Жишээлбэл, хэрэв та DTD-ийн тодорхойлолтууд аль хэдийн байгаа бөгөөд тэдгээрийн хэрэглээ нь ажлыг ихээхэн хөнгөвчлөх боломжтой корпорацид ажилладаг бол энэ асуудал үүсч болно, учир нь тэд асуудлыг бусад хүмүүсийн ойлгосноор тайлбарладаг. DTD-ийн тодорхойлолтыг дахин ашиглах нь ихэвчлэн ашигтай байдаг, i.e. Өмнө нь үүсгэсэн DTD тодорхойлолтуудын нийтлэг бүтцийг ашиглах. Хэрэв та гадны түншийн программ хангамжтай холбогдох шаардлагатай програм хөгжүүлж байгаа бол одоо байгаа ойлголтуудыг дахин ашиглахаас өөр сонголт байхгүй. DTD-ийн одоо байгаа тодорхойлолтууд нь ойлгохын тулд ярих ёстой нийтлэг хэлийг бүрдүүлдэг. Хэрэв үзэл баримтлал аль хэдийн байгаа бол тухайн үзэл баримтлалын хүрээнд ойлгохын тулд ажиллах ёстой.

Хэрэв та бусад хөгжүүлэгчдийн DTD-ээс өөрт хэрэгтэй тодорхойлолтуудыг ашиглах эсвэл нарийн төвөгтэй асуудлыг тайлбарласан баримт бичгийг үүсгэхийн тулд сегментчилсэн DTD-г нэгтгэх үед таны баримт бичиг ижил нэртэй элементүүдийг ашигладаг бол асуудал үүсэх эрсдэлтэй. тодорхойгүй байдал, нэрний зөрчилдөөн.

Олон DTD-ийн нэрийн жишээг ашиглах үед асуудал улам бүр нэмэгддэг. Энэ тохиолдолд бид ямар элемент, ямар DTD тодорхойлолтыг хэлж байгааг мэдэхгүй байна, сайн боловсруулсан баримт бичгийн энэ асуудлыг тодорхой бус байдал гэж нэрлэдэг. Түүнээс гадна, хэрэв баримт бичигт байгаа нэрс шаардлагатай бол хүчинтэй байдлын шалгалтууд, бид програмаа маш будлиантуулж чадна. Энэ асуудлыг нэрний мөргөлдөөн гэж нэрлэдэг.

Нэрийн орон зай

Нэрийн орон зай нь хэрэглэгчдэд маш чухал хоёр аргаар тусалж чадна. Тэдний тусламжтайгаар та:

  • Хөтөлбөр нь аль эх сурвалжаас элемент эсвэл шинж чанарыг ялгах болно гэдэгт итгэх итгэлээ алдалгүйгээр хоёр ба түүнээс дээш эх сурвалжийн баримт бичгүүдийг нэгтгэх;
  • Боломжтой бол хэрэглэгчийн агентад баримт бичгийн төрлийн тодорхойлолт (DTD) эсвэл элементүүд болон шинж чанаруудын бусад тайлбар зэрэг нэмэлт материалд хандахыг зөвшөөрнө үү.

Нэрийн орон зай нь XML баримт бичигт элемент эсвэл атрибутын нэр болгон ашиглаж болох тодорхой утгууд эсвэл шинж чанаруудын цуглуулга юм. XML дээрх нэрсийн орон зайг Нөөцийн нэгдсэн танигч (URI)-ээр тодорхойлдог (та сервер дээрх DTD хаягийг URI болгон ашиглаж болно). Энэ нь нэрийн орон зай бүрийг өвөрмөц болгох боломжийг олгодог.

Тиймээс, янз бүрийн эх сурвалжийн элементүүдийг нэгтгэсэн баримт бичигт нэрийн орон зайг үр дүнтэй ашиглахын тулд бид дараахь зүйлийг тодорхойлох шаардлагатай.

  • Элементийн ашиглалтыг тодорхойлсон URI-ийн лавлагаа.
  • Манай элементийн аль нэрний орон зайнаас гаралтай болохыг ойлгох боломжийг олгодог нэр. Энэ нэр нь элементийн угтвар хэлбэртэй байна (жишээ нь, тодорхой бус Номын элементийн нэр нь catalog бол тухайн элементийг дуудах болно. ).

Нэрийн орон зайг ашиглах, зарлах

Нэрийн орон зайн мэдэгдэл

Янз бүрийн тэмдэглэгээний хэлээр - XML-ийн хэрэгжилт - шошгуудын ижил нэр, тэдгээрийн шинж чанарууд нь огт өөр утгатай байдаг тул тэдгээрийг ямар нэгэн байдлаар ялгах чадвартай байх шаардлагатай. Үүнийг хийхийн тулд шошго болон шинж чанаруудын нэрэнд богино угтвар өгөгдсөн бөгөөд нэрнээс нь хоёр цэгээр тусгаарлагдсан байдаг. Нэрийн угтвар нь нэрийн орон зайг тодорхойлдог танигчтай холбоотой. Угтварууд нь ижил танигчтай холбоотой бүх шошго болон атрибутуудын нэр нь нэг нэрийн орон зайг бүрдүүлдэг бөгөөд үүнд нэр нь өвөрмөц байх ёстой.

Бид нэрийн орон зайн мэдэгдлийг хараад хүн бүрийг таних боломжийг олгохыг хүсдэг тул бид түүнд тусгай үг үлдээдэг. Нэрийн орон зайн зөвлөмжийн дагуу энэ үг нь xmlns юм. Аттрибутын утга нь ашиглах нэрийн орон зайг тодорхойлсон URI юм. Энэ нь ихэвчлэн DTD-ийн тодорхойлолтын URL байдаг ч үргэлж ийм байх албагүй. Нэрийн орон зайн угтвар болон танигчийг xmlns атрибутаар дараах байдлаар тодорхойлно.

Таны харж байгаагаар ntb угтварыг саяхан тодорхойлсон боловч ntb: notebook гэсэн нэрэнд аль хэдийн ашиглагдаж болно. Цаашид бид http://some.firm.com/2003/ntbml нэрийн талбарт оноохыг хүсэж буй шошго болон шинж чанаруудын нэрийг ntb-ээр угтдаг, жишээлбэл:

Горелово

Нэмж дурдахад нэг шошгонд хэд хэдэн нэрийн орон зай үүсч болно. Олон нэрийн орон зайг холих жишээг доор харуулав.

Номын элемент нь каталогийн нэрийн зайнаас, ISBN шинж чанар нь захиалгаас ирдэг.

Жишээ нь угтварын хамт нэрлэнэ үү

өргөтгөсөн, мэргэшсэн эсвэл шаардлага хангасан нэр (ONName. Qualified Name) гэж нэрлэдэг. Нэрийн хоёр цэгийн ард бичигдсэн хэсгийг нэрний орон нутгийн хэсэг гэнэ.

Вэб нөөцийн нэрсийн нэршил нь будлиантай байж болно. Нөөцийн нэгдмэл байршил тогтоогч ( Нөөцийн нэгдмэл байршуулагч, URL) хандалтын протокол болон сүлжээний байршлын хувьд нөөцийг заана. Нөөцийн нэгдмэл танигч ( Нөөцийн нэгдсэн танигч, URI) нь зарим нөөцийн өвөрмөц нэр юм. URI-г зүгээр л нэрний орон зайг тодорхойлсон тэмдэгтүүдийн өвөрмөц мөр болгон хар.

SGML болон XML-ийн дүрмийн дагуу нэрэнд хоёр цэгийг энгийн тэмдэгт болгон ашиглаж болох тул угтвартай нэр нь зүгээр л заль мэх юм; нэрийн орон зайг "мэддэггүй" аливаа програм, баримт бичгийг задлан шинжилдэг. шаардлага хангасан нэр нь энгийн нэр. Үүнээс үзэхэд, ялангуяа, онд баримт бичгийн төрлийн мэдэгдэл(Баримт бичгийн төрлийн мэдэгдэл) нэрийн угтварыг орхигдуулж болохгүй.

xmlns атрибут нь зөвхөн үндсэн элемент биш аль ч XML элемент дээр гарч болно. Түүний тодорхойлсон угтварыг xmlns атрибут бичсэн элемент болон дотор нь байрлуулсан бүх элементүүдэд ашиглаж болно. Түүнээс гадна нэг элемент дотор олон нэрийн орон зайг тодорхойлж болно.

Оруулсан элементүүдэд угтварыг өөр танигчтай холбосноор нэрийн орон зайг дарж болно.

Нэрийн орон зай ашигладаг баримт бичигт угтваргүй шошгоны нэр гарч ирэх нь уг нэр нь үндсэн нэрийн орон зайд харьяалагддаг гэсэн үг юм.

Сайн боловсруулсан баримт бичиг нь бүх элементийн нэрийн зайг ашиглах ёстой.

Ямар ч тохиолдолд xml тэмдэгтээр эхэлсэн угтварууд нь XML хэлэнд зориулагдсан байдаг. xmlns угтвар нь өөр, тодорхойлогдсон угтварыг түүний нэрийн орон зай танигчтай холбоход ашиглагддаг. xmlns угтварыг тодорхойлох шаардлагагүй, үүнийг "XML дахь нэрсийн орон зай" зөвлөмжөөр нэвтрүүлсэн бөгөөд тэнд нэрийн орон зай танигчтай холбогдсон байна. http://www.w3.ori/2000 /xmlns/.

Өөр нэг угтвар болох xml нь танигчтай ижил зөвлөмжид холбогдсон байна http://www.w3.org/XML/1998/namespace. Мөн XML баримт бичигт үүнийг тодорхойлох шаардлагагүй. Эдгээр танигчтай өөр ямар ч угтварыг холбох боломжгүй. Preserve хоосон зайны тэмдэгтүүдийг хэвээр үлдээх заавар. Энэ нь програмын код гэх мэт зарим текстийн хувьд чухал юм. Анхдагч утга нь зохицуулагчийн үзэмжээр хоосон зай үлдээдэг.

Хамрах хүрээ

Нэрийн орон зайн мэдэгдлүүд нь програмчлалын хэл дээрх хувьсагчийн мэдэгдлүүдтэй адил хамрах хүрээтэй байдаг. Нэрийн орон зайг XML баримт бичгийн эхэнд үргэлж зарладаггүй, заримдаа дараагийн хэсгүүдэд зарладаг тул энэ нь чухал юм. Нэрийн орон зайн мэдэгдэл нь тэнд тодорхой тодорхойлогдоогүй байсан ч гарч буй элемент болон тухайн элементийн удамд хамаарна. Нэр нь зөвхөн мэдүүлгийн хүрээнд ашиглагдсан тохиолдолд л нэрийн орон зайд хамаарах боломжтой.

Гэсэн хэдий ч бид бусад нэрийн орон зайг өвлөн авах элементүүд дээр нэрийн зайн хамрах хүрээг холих шаардлагатай болно. Үүнтэй холбогдуулан хамрах хүрээг зарлах хоёр аргыг тодорхойлсон: анхдагч ба шаардлага хангасан.

Өгөгдмөл хамрах хүрээ

Таны таамаглаж байгаачлан баримт бичигт нэр болгоны угтвар тавих нь уйтгартай болдог. Үнэн хэрэгтээ нэрийн хүрээ гэсэн ойлголтыг нэвтрүүлснээр бид баримт бичигт олон тооны угтваруудыг хольж болно. Хэрэв бид өгөгдмөл нэрийн орон зайг тодорхойлсон бол энэ нь мэдэгдлийн хүрээнд бүх шаардлага хангаагүй нэрийг эзэмшдэг гэж үзнэ. Тиймээс, үндсэн элементэд зарлагдсан өгөгдмөл нэрийн орон зай нь бүхэл баримт бичгийн хувьд өгөгдмөл гэж тооцогддог бөгөөд зөвхөн тухайн баримт бичигт зарлагдсан илүү тодорхой нэрийн талбараар л дарагдаж болно.

Нэрийн орон зайг хамрах хүрээний өгөгдмөл нэрийн орон зай болгохын тулд угтварын мэдэгдлийг орхи.

Хэрэв угтварыг зарлаж, дараа нь нэртэй хамт хэрэглэвэл нэрийн орон зайг тодорхой тогтоосон гэж үзнэ. Нэрийн талбарт шаардлага хангаагүй нэр өгөхийн тулд та шаардлага хангаагүй нэрийг (угтваргүй) агуулсан өгөгдмөл зайг зарлах ёстой.

Мэргэшсэн хамрах хүрээ

Хэрэв та өөрийн нэрийн орон зайг тодорхой ялгаж чадвал дээрх арга сайн ажиллана. Гэхдээ заримдаа баримт бичигт гадны нэрийн орон зайн нэрийг оруулах шаардлагатай болдог. Бүхэл бүтэн хамрах хүрээний нэрийн орон зайг зарлахын оронд та шаардлага хангасан нэрийг ашиглаж болно. Баримт бичгийн эхэнд шаардлагатай нэрийн орон зайг зарлаж, дараа нь тэдгээрийг ашиглах цэг дээр тохируулна уу.

Туслана.
PHP дахь нэрийн орон зайг дэмжих зам нь маш хэцүү байсан. Гэвч аз болоход энэ нь PHP 5.3 хэл дээр нэмэгдсэн бөгөөд түүнээс хойш РНР кодын бүтэц мэдэгдэхүйц сайжирсан. Гэхдээ бид тэдгээрийг яг яаж ашиглах ёстой вэ?

Нэрийн орон зай гэж юу вэ?

"Нэрийн зайны нэрийг мөр болгон хадгалахдаа арын зураасыг бүү мартаарай!"

Нэрийн талбарыг харандаа, захирагч, цаас гэх мэт юу ч хийж болох хайрцаг гэж бод. Эдгээр нь таны зүйлс. Таны хайрцгийн яг доор хэн нэгний хайрцаг байгаа бөгөөд эзэн нь ижил зүйлийг дотор нь хадгалдаг. Бие биенийхээ эд зүйлсийг ашиглахаас зайлсхийхийн тулд та хайрцган дээр шошго хийхээр шийдсэн бөгөөд ингэснээр хэнд хамаарах нь тодорхой болно.

Өмнө нь хөгжүүлэгчид кодыг салгахын тулд анги, функц, тогтмолууддаа доогуур зураасан угтварыг ашиглах ёстой байсан. Энэ нь хүн бүр өөрийн эд зүйлсээ шошгож, нэг том хайрцагт хадгалсантай тэнцэнэ. Мэдээжийн хэрэг, энэ нь наад зах нь нэг төрлийн зохион байгуулалт боловч энэ нь маш үр дүнгүй юм.

Нэрийн орон зай, туслаач! Та ижил функц, анги, интерфэйсийг зарлаж, тусдаа нэрийн талбарт тогтмолыг тодорхойлж, алдаа гаргахгүйгээр хийж болно. Үндсэндээ нэрийн орон зай нь ердийн PHP код агуулсан шаталсан шошготой кодын блокуудаас өөр зүйл биш юм.

Та тэдгээрийг ашигла!

Та нэрийн орон зайг шууд бусаар ашиглаж байгаагаа ойлгох нь чухал; PHP 5.3-аас эхлэн хэрэглэгчийн тодорхойлсон нэрийн талбарт хараахан зарлаагүй байгаа бүх тодорхойлолтууд дэлхийн нэрийн орон зайд багтдаг.

Глобал нэрийн орон зайд мөн mysqli_connect() болон Exception анги зэрэг PHP-ийн бүх дотоод тодорхойлолтуудыг хадгалдаг. Глобал нэрийн орон зай нь өвөрмөц таних нэртэй байдаггүй тул үүнийг ихэвчлэн глобал нэрийн орон зай гэж нэрлэдэг.

Нэрийн орон зайг ашиглах нь сонголттой гэдгийг анхаарна уу.
Тэдгээргүйгээр таны PHP скрипт сайн ажиллах бөгөөд энэ зан байдал удахгүй өөрчлөгдөхгүй.

Нэрийн орон зайн тодорхойлолт

Нэрийн орон зайг агуулсан файл нь бусад кодын өмнө өөрийн мэдэгдлийг агуулсан байх ёстой. Нэрийн талбараас өмнө зарлаж болох цорын ганц зүйл бол declare гэсэн нөөцлөгдсөн үг бөгөөд зарлах илэрхийлэл нь нэрийн зайны мэдэгдлийн өмнө гарч ирж файлын кодчилолыг илтгэнэ.

Нэрийн орон зайг хадгалсан үгийн нэрийн орон зайг ашиглан зарладаг. Нэрийн орон зай нь PHP дээрх бусад танигчтай ижил дүрмийг баримталдаг. Тиймээс нэрийн орон зай байх ёстой үсэг эсвэл доогуур зураасаар эхэлж, дараа нь хэдэн ч үсэг, тоо, доогуур зураас оруулна.

Хэрэв та кодын блокийг глобал орон зайд тодорхойлохыг хүсвэл нэр нэмэхгүйгээр namespace түлхүүр үгийг ашиглаж болно.

Та нэг файлд олон нэрийн орон зайг ашиглаж болно.

Та хэд хэдэн өөр файлд ижил нэрийн орон зайг ашиглаж болно; файлын холболтын процесс нь тэдгээрийг автоматаар нэгтгэх болно. Ангиудтай адил нэрийн орон зайн тодорхойлолтын тоог нэг файлаар хязгаарлах нь сайн кодчилол юм.

Тогтворгүй тодорхойлолтоос зайлсхийх, програмын кодонд илүү уян хатан байдал, зохион байгуулалтыг нэвтрүүлэхийн тулд нэрийн орон зайг ашигладаг.

Буржгар хаалт нь бүрэн сонголттой гэдгийг анхаарна уу. Үнэн хэрэгтээ, нэг файлын дүрэмд нэг нэрийн зайг ашиглах, буржгар хаалтуудыг орхигдуулах нь таны кодыг илүү цэвэрхэн болгодог - үүрлэсэн кодыг доголдуулах шаардлагагүй.

Дэд нэрийн орон зай

Нэрийн орон зай нь компьютер дээрх файлын системийн лавлахуудын нэгэн адил тодорхой шатлалыг дагаж болно. Дэд орон зай нь төслийн бүтцийг зохион байгуулахад маш хэрэгтэй. Жишээлбэл, хэрэв таны төсөл өгөгдлийн сангийн хандалт шаарддаг бол та өгөгдлийн сангийн онцгой байдлын зохицуулагч болон холболтын зохицуулагчийн кодыг Өгөгдлийн сангийн нэрийн талбарын дэд нэрийн зайд байрлуулж болно.

Уян хатан байхын тулд үүрлэсэн нэрийн орон зайг дэд директорт хадгалах нь ухаалаг хэрэг юм. Энэ нь төслийн бүтэц зохион байгуулалтад тусалж, PSR-4 стандартыг дагаж мөрддөг автомат ачаалагчдад ашиглахад илүү хялбар болгодог.

PHP нь арын ташуу зураасыг нэрийн зай тусгаарлагч болгон ашигладаг.

Сонирхолтой баримт: RFC-д аль нэрийн зай тусгаарлагчийг ашиглахаа шийдэхийн тулд эмотикон ашиглах сонголтыг авч үзсэн.

// myproject/database/connection.phpТа хүссэнээрээ олон нэрийн орон зайг ашиглаж болно.

Дотоод кодын блок бүхий дэд нэрсийн орон зайг тодорхойлохыг дэмждэггүй. Дараах жишээ нь ноцтой алдааг буцаах болно: "Нэрний орон зайн мэдэгдлүүдийг оруулах боломжгүй."

Нэрийн орон зайнаас дуудлагын код

Хэрэв та объектын шинэ жишээ үүсгэх, функцийг дуудах эсвэл өөр өөр нэрийн орон зайн тогтмолуудыг ашиглахыг хүсвэл урвуу зураасыг ашиглана. Нэрийн орон зайн гурван төрлийн нэрийн тодорхойлолт байдаг:
  • Шаардлагагүй нэр
  • Мэргэшсэн нэр
  • Бүрэн эрхтэй нэр

Бүрэн бус нэр

Энэ нь анги, функц эсвэл тогтмолын нэр бөгөөд ямар ч нэрийн орон зайд хамаарах лавлагааг оруулаагүй болно. Нэрийн орон зайтай ажиллаж эхэлж буй хүмүүсийн хувьд энэ нь нийтлэг үзэл бодол юм.

Бүтэн нэр

Бид дэд нэрсийн орон зайн шатлалд ингэж ханддаг; урвуу налуу зураасаар тусгаарлагдсан.

Доорх жишээ нь маш аюултай алдааг буцаана: "Үхлийн алдаа: "MyProject\Database\MyProject\FileAccess\Input" анги олдсонгүй" учир нь MyProject\FileAccess\Input нь таны байгаа нэрийн талбарт хамааралгүй юм.

Үнэмлэхүй нэр

Бүтэн болон хэсэгчилсэн нэрийг таны одоо байгаа нэрийн орон зайд хамааруулан ашигладаг. Тэдгээрийг зөвхөн тухайн түвшний хандалтыг тодорхойлох эсвэл нэрийн орон зайн шатлал руу гүнзгий ороход ашиглаж болно.

Хэрэв та шатлалын дээд түвшинд байгаа функц, анги эсвэл тогтмол руу хандахыг хүсвэл харьцангуй биш харин үнэмлэхүй замыг бүтэн нэрээр нь ашиглах хэрэгтэй. Дуудлага нь урвуу зураасаар эхлэх ёстой. Энэ нь PHP-д энэ дуудлагыг таны одоогийн байршилд хандахын оронд дэлхийн орон зайнаас хийх ёстой гэдгийг мэдэх боломжийг олгоно.

Бид PHP-ийн дотоод функцүүдийн бүтэн нэрийг ашиглах шаардлагагүй. Функц болон тогтмолуудын шаардлага хангаагүй нэрс нь одоогийн нэрийн талбарт тодорхойлогдоогүй бол глобал нэрийн талбарт тодорхойлогдоно.

Үүнийг мэдсэнээр бид анхны функцийг (эсвэл тогтмол) дуудах боломжтой хэвээр байгаа ч дотоод PHP функцуудыг хэт ачаалж болно.

"; }

Динамик дуудлага

PHP бол динамик програмчлалын хэл юм; Тиймээс та энэ функцийг ашиглан нэрийн зайнаас кодыг дуудах боломжтой. Энэ нь үндсэндээ динамик ангийн нэрийг ашиглах эсвэл динамик файлыг хувьсагч ашиглан холбож нэрийг нь хадгалахтай ижил юм. РНР нэр тусгаарлагч нь мөрт ижил мета тэмдэгтүүдийг ашигладаг. Нэрийн зайны нэрийг мөр болгон хадгалахдаа арын зураасыг бүү мартаарай!

нэрийн орон зайн түлхүүр үг

Namespace түлхүүр үг нь зөвхөн нэрийн орон зайг тодорхойлоход ашиглагдахаас гадна одоогийн нэрийн орон зай руу залгахад ашиглаж болох бөгөөд функциональ хувьд ангийн self түлхүүр үгтэй төстэй.

__NAMESPACE__ тогтмол

Self түлхүүр үг нь одоогийн ангийн нэрийг тодорхойлох боломжгүйтэй адил namespace түлхүүр үгийг одоогийн нэрийн талбарт ашиглах боломжгүй. Тиймээс бид __NAMESPACE__ тогтмолыг ашигладаг

Энэ тогтмол нь нэрний орон зайг сурч эхлэхэд маш хэрэгтэй; энэ нь бас дибаг хийхэд маш хэрэгтэй. Энэ нь мөр учраас үүнийг дээр дурдсан динамик кодын дуудлагуудтай хамт ашиглаж болно.

Импортлох эсвэл нэрийн өөр нэр үүсгэх

нэрийн талбарт ашиглах шаардлагагүй

РНР дахь нэрийн орон зайн чухал шинж чанар нь гадаад үнэмлэхүй нэрийг нэрлэх чадвар юм нууц нэр, эсвэл импортлох.

Импорт нь нэрийн орон зайн маш хэрэгтэй бөгөөд үндсэн тал юм. Энэ нь танд номын сан гэх мэт гадны багцуудыг нэрийн зөрчилдөөнөөс санаа зовохгүйгээр ашиглах боломжийг олгоно. Импортыг use түлхүүр үг ашиглан хийнэ. Хэрэв хүсвэл та as гэсэн түлхүүр үгийг ашиглан өөр өөр нэрийг зааж өгч болно.

болгон ашиглах

Үүнийг хэрхэн ашиглах вэ

Үнэмлэхүй нэр нь шаардлага хангаагүй богино нэртэй холбоотой байж болох тул та үүнийг ашиглах болгондоо үнэмлэхүй нэрийг нь бичих шаардлагагүй. Алиас үүсгэх эсвэл импортлох нь эцэг эхийн нэрийн орон зайд эсвэл дэлхийн хэмжээнд байх ёстой. Арга эсвэл функц дотор үүнийг хийхийг оролдох нь буруу синтакс юм.

Өөр нэрээр өөр нэр өгөх нь өөр хувилбар юм

Та мөн Exception гэх мэт глобал ангиудыг импортлох боломжтой. Импортлохдоо түүний үнэмлэхүй нэрийг бичих шаардлагагүй.

Импортын нэр нь үнэмлэхүй байх ёстой бөгөөд одоогийн нэрийн талбартай харьцуулахад задлан шинжилдэггүй тул нэрний талбар дахь нэрсийн хувьд урд талын ташуу зураас байх шаардлагагүй гэдгийг анхаарна уу.

Хэдийгээр динамик нэрийн орон зайг дуудах дэмжлэг байдаг ч динамик импортыг дэмждэггүй.

Дүгнэлт

Нэрийн орон зайг тодорхойлолтын зөрчилдөөнөөс зайлсхийх, програмын кодонд илүү уян хатан байдал, зохион байгуулалтыг нэвтрүүлэх зорилгоор ашигладаг. Нэрийн орон зайг ашиглах шаардлагагүй гэдгийг санаарай; Энэ функцийг объект хандалтат хандлагатай хослуулан ашигладаг. Та өөрийн (ирээдүйд) PHP төслөө нэрийн орон зайг ашиглан дараагийн түвшинд гаргах талаар бодож үзнэ гэж найдаж байна.