Domov - Nastavenie internetu
Triedy a menné priestory. Triedy a priestory názvov Používanie a deklarovanie priestorov názvov

Triedy a priestory názvov

triedy .NET Framework

Snáď najväčšou výhodou písania riadeného kódu – aspoň z pohľadu vývojára – je, že ho môžete používať Knižnica základnej triedy .NET .

Triedy jadra .NET poskytujú obrovskú zbierku tried spravovaného kódu, ktoré vám umožňujú vyriešiť takmer akýkoľvek problém, ktorý sa predtým dal vyriešiť pomocou Windows API. Všetky tieto triedy sledujú rovnaký objektový model IL s jedinou dedičnosťou. To znamená, že môžete buď vytvárať objekty z ktorejkoľvek zo základných tried .NET alebo z nich dediť svoje vlastné triedy.

Základné triedy .NET sa líšia tým, že sú navrhnuté tak, aby boli intuitívne a ľahko použiteľné. Napríklad, ak chcete spustiť vlákno, musíte zavolať metódu Start() triedy Niť. Ak chcete, aby objekt TextBox bol nedostupný, nastavte vlastnosť objektu Enabled na hodnotu false. Tento prístup, ktorý poznajú vývojári Visual Basic a Java, ktorých knižnice sa rovnako ľahko používajú, bude obrovskou úľavou pre vývojárov C++, ktorí roky zápasia s funkciami API, ako sú GetDIBits(), RegisterWndClassEx() a IsEqualIID(). ako aj mnoho funkcií, ktoré si vyžadovali prechod cez kľučky okien.

Vývojári jazyka C++ však mali vždy ľahký prístup ku kompletnej sade Windows API, zatiaľ čo vývojári Visual Basic 6 a Java boli obmedzení na základné funkcie operačného systému, ku ktorým majú prístup zo svojich jazykov. Základné triedy .NET kombinujú jednoduchosť používania knižníc Visual Basic a Java s relatívne úplným pokrytím sady funkcií Windows API. Mnoho funkcií systému Windows nie je prístupných prostredníctvom základných tried a v týchto prípadoch sa budete musieť uchýliť k funkciám API, ale vo všeobecnosti to platí len pre tie najexotickejšie funkcie. Na každodenné použitie bude vo všeobecnosti postačovať sada základných tried. Ak ale potrebujete zavolať funkciu API, tak .NET poskytuje tzv mechanizmus vyvolávania platformy, ktorý zaručuje správnu konverziu dátových typov, takže teraz táto úloha nie je o nič ťažšia ako volanie týchto funkcií priamo z kódu C++, bez ohľadu na to, v akom jazyku je kód napísaný - C#, C++ alebo Visual Basic 2010.

Menné priestory

Menné priestory je spôsob, ktorým sa .NET vyhýba konfliktom mien medzi triedami. Majú zabrániť situáciám, keď definujete triedu, ktorá predstavuje zákazníka, nazvete ju Customer a potom niekto iný urobí to isté (toto je pomerne bežný scenár).

Menný priestor nie je nič iné ako skupina dátových typov, ale má za následok, že názvy všetkých dátových typov v rámci menného priestoru sú automaticky označené predponou s názvom menného priestoru. Menné priestory môžu byť vnorené do seba. Napríklad väčšina základných tried .NET na všeobecné účely sa nachádza v priestore názvov Systém. Základná trieda Pole odkazuje na tento priestor, takže jeho celý názov je System.Array.

Platforma .NET vyžaduje, aby boli všetky názvy deklarované v rámci menného priestoru; môžete napríklad zadať svoju triedu Moja trieda do menného priestoru Moja spoločnosť. Potom bude vyzerať celý názov tejto triedy MyCompany.MyClass.

Všimnite si, že ak menný priestor nie je špecifikovaný explicitne, typ sa pridá do nepomenovaného globálneho menného priestoru.

Vo väčšine situácií Microsoft odporúča použiť aspoň dva vnorené menné priestory: prvý je názov vašej spoločnosti a druhý je názov technológie alebo softvérového balíka, do ktorého trieda patrí, takže vyzerá asi takto: MyCompany.SomeNamespace .Moja trieda. Vo väčšine prípadov tento prístup ochráni triedy vašej aplikácie pred potenciálnymi konfliktmi s názvami tried napísanými vývojármi z iných spoločností.

Nasledujúca tabuľka je krátkym zoznamom niektorých (ale určite nie všetkých) menných priestorov ponúkaných v .NET, ktoré boli rozdelené do skupín podľa funkčnosti:

.NET Framework Key Namespaces
Menný priestor v .NET Popis
Systém Vo vnútri menného priestoru Systém obsahuje mnoho užitočných typov na prácu s internými údajmi, matematiku, generovanie náhodných čísel, premenné prostredia a zber odpadu, ako aj množstvo bežne používaných výnimiek a atribútov
Systém.Kolekcie
System.Collections.Generic
Tieto menné priestory obsahujú množstvo typov kontajnerov, ako aj niekoľko základných typov a rozhraní, ktoré vám umožňujú vytvárať špeciálne kolekcie
System.Data
System.Data.Common
System.Data.EntityClient
System.Data.SqlClient
Tieto menné priestory sa používajú na interakciu s databázami pomocou ADO.NET
System.IO
System.IO.Compression
System.IO.Ports
Tieto priestory obsahujú mnoho typov navrhnutých na spracovanie I/O súborov, kompresiu údajov a manipuláciu s portami.
Systém.Odraz
System.Reflection.Emit
Tieto priestory názvov obsahujú typy, ktoré podporujú zisťovanie typov za behu, ako aj dynamické vytváranie typov
System.Runtime.InteropServices Tento priestor názvov obsahuje prostriedky, pomocou ktorých môžete typom .NET povoliť interakciu s „nespravovaným kódom“ (ako sú knižnice DLL založené na jazyku C a servery COM) a naopak.
Systém.Výkres
System.Windows.Forms
Tieto priestory názvov obsahujú typy používané na vytváranie desktopových aplikácií pomocou natívnej sady grafických nástrojov .NET (Windows Forms).
Systém.Windows
Ovládanie.systému.Windows
System.Windows.Shapes
Priestor System.Windows je koreň medzi týmito niekoľkými mennými priestormi, ktoré predstavujú sadu grafických nástrojov Windows Presentation Foundation (WPF)
System.Linq
System.Xml.Linq
System.Data.DataSetExtensions
Tieto priestory názvov obsahujú typy, ktoré sa používajú pri programovaní pomocou LINQ API
System.Web Tento priestor názvov je jedným z mnohých, ktoré vám umožňujú vytvárať webové aplikácie ASP.NET
System.ServiceModel Tento priestor názvov je jedným z mnohých, ktoré môžete použiť na vytváranie distribuovaných aplikácií pomocou rozhrania Windows Communication Foundation (WCF) API.
System.Workflow.Runtime
Systém.Pracovný postup.Aktivity
Tieto dva menné priestory sú hlavnými predstaviteľmi mnohých menných priestorov, ktoré obsahujú typy používané na vytváranie aplikácií s podporou pracovného toku pomocou rozhrania Windows Workflow Foundation (WWF) API.
System.Threading
System.Threading.Tasks
Tento priestor názvov obsahuje množstvo typov na vytváranie viacvláknových aplikácií, ktoré dokážu rozložiť pracovné zaťaženie medzi viacero CPU.
Systém.Bezpečnosť Bezpečnosť je súčasťou sveta .NET. Menné priestory súvisiace s bezpečnosťou obsahujú mnoho typov, ktoré sa zaoberajú povoleniami, kryptografickou bezpečnosťou atď.
System.Xml Tento priestor názvov orientovaný na XML obsahuje množstvo typov, ktoré možno použiť na interakciu s údajmi XML

Úloha koreňového priestoru spoločnosti Microsoft

Pri skúmaní zoznamu v tabuľke bolo ľahké si všimnúť, že System namespace je koreňom slušného počtu vnorených menných priestorov (ako System.IO, System.Data atď.). Ako sa však ukazuje, okrem System ponúka knižnica základných tried aj množstvo ďalších koreňových menných priestorov najvyššej úrovne, z ktorých najužitočnejší je Menný priestor spoločnosti Microsoft.

Pri odpovedi na otázku, čo je používanie menného priestoru std, je v prvom rade potrebné poznamenať, že v preklade z angličtiny znamená výraz popisovaný priestor názvov, čo je rozsah deklarácie, potrebný na definovanie rôznych identifikačných foriem: funkcie a závislé/nezávislé premenné.

Vďaka nemu nedochádza ku konfliktu medzi názvami, keďže existujú situácie, kedy viaceré premenné nadobúdajú rovnaké hodnoty. Zvyčajne sa to stane, keď sú vytvorené rôzne knižnice.

Identifikátory sú vo vzájomnom vzťahu voľne dostupné. Pri použití formátu celého mena získajú bezplatný prístup k nezávislým členom.

Na to je to mimoriadne dôležité aby objekt obsahoval plnú formu mena pomocou menného priestoru std. Je to dôležité pre vizuálne pochopenie toho, ako deklarácia vyzerá, keď je umiestnená v názve priestoru.

Obrázok ukazuje niekoľko variantov prístupu ku kódovaniu, umiestnené v rámci a za jeho plotmi:

1 Takto to vyzerá celé meno:

2 S cieľom doplniť existujúci inzerát, pridať pomocou:

3 Ak chcete pridať všetky existujúce ID, použite príslušnú smernicu:

Použitie smernice

Direktíva using umožňuje využitie všetkých dostupných mien, ktoré sú zahrnuté v mennom priestore.

Nie je potrebné špecifikovať kvalifikátor.

Musíte použiť použitie v súbore vo formáte cpp. Dôležitou podmienkou je však prítomnosť viacerých identifikátorov.

V prípade, že existuje iba niekoľko mien, bude dôležité vytvoriť obyčajný názov.

Potom môžete pridať iba potrebné identifikátory a zvyšok nechať na pokoji.

Je dôležité poznamenať, že ak sa názov lokálnej premennej a hlavnej premennej zhodujú, potom v tomto prípade bude prvá v skrytom prístupe.

Upozorňujeme, že vytváranie premenných s rovnakým názvom je nezákonné.

Poradte! Pre uľahčenie používania môže byť príkaz using umiestnený v hornej časti súboru formátu cpp., alebo naopak, umiestnený vo vytvorenej knižnici.

Aby ste si zabezpečili čo najpohodlnejšie pracovné podmienky, môžete pracovať na umiestnení potrebných súborov.

Smernica o používaní by sa nemala umiestňovať, pokiaľ to nie je absolútne nevyhnutné v hlavičkách v súbore vo formáte H.

Dôvodom je skutočnosť, že touto akciou sa všetky identifikátory stanú aktívnymi v oblasti viditeľnosti, čím sa zvýši pravdepodobnosť konfliktu niektorých mien.

Pre súbory je najlepším riešením použiť celé meno.

V prípade, že sa ukážu byť príliš dlhé, môžete použiť skratky vo forme aliasov.

Deklarácie menného priestoru

Je zvykom umiestňovať inzeráty vo forme názvov súborov. V prípade, že sa vykonávanie špecifikovaných funkcií nachádza v samostatnej knižnici alebo súbore, je dôležité určiť celé meno.

Aby sme pochopili, o akých akciách hovoríme, stojí za to pozrite si nasledujúci obrázok:

Na implementáciu funkcie contosodata formátu cpp. je tiež dôležité použiť v prípade celé meno keď je smernica na úplnom začiatku:

Použitie menného priestoru std. môže obsahovať inzeráty v niekoľkých sekciách naraz umiestnených v tom istom súbore.

Vďaka kompilátoru sa všetky prvky kombinujú počas spracovania údajov.

Napríklad std. je spravidla deklarovaný vo všetkých hlavičkách prístupných súborov umiestnených v dostupných knižniciach štandardného typu.

Členovia označení plne kvalifikovaným menom môžu byť definovaní nielen v rámci menného priestoru, ale aj mimo neho, ak majú explicitnú kvalifikáciu.

Čo sa týka definície, tá musí nasledovať za deklaráciou v mennom priestore, kde je vytvorená.

Ako vizuálny príklad venujte pozornosť nasledujúcemu obrázku:

Najčastejšie sa táto chyba objaví, keď sa poruší poradie definície alebo keď sa súčasti celého názvu okamžite zahrnú do dostupných objektov.

Keď cookies nie sú deklarované v konkrétnom mennom priestore, formálne patrí do priestoru globálneho typu.

Poradte! Pokiaľ to nie je absolútne nevyhnutné, odporúča sa vyhnúť sa zahrnutiu členov do priestoru globálnych typov.

Významnou výnimkou z pravidla môže byť len hlavná možnosť, čo znamená povinné zahrnutie do rozsiahleho priestoru.

Ak chcete vytvoriť identifikátor globálneho typu, musíte použiť zodpovedajúcu funkciu viditeľnosti vo forme celého mena.

Táto akcia pomôže vytvoriť rozlišovaciu vlastnosť jedného identifikátora od iných existujúcich identifikátorov, ktoré sú v inom mennom priestore.

To vám pomôže pochopiť kód.

Space std.

Stojí za zmienku, že priestory môžu byť vnoreného typu.

Ak sa myslí obyčajné zapustenie, tak má neobmedzený charakter do celého priestoru.

Keď už hovoríme o rodičovských členoch, takú funkciu nemajú.

Na rozšírenie sú potrebné vstavané prílohy.

Pre presnejšiu definíciu a pochopenie, venujte pozornosť nasledujúcemu obrázku:

Zapuzdrené informácie pre ďalšiu implementáciu môžu byť tiež súčasťou bežného vnoreného priestoru a fungovať ako rozhranie otvoreného typu v nadradenom priestore.

Porovnania sú obyčajné prílohy štandardného typu, vstavané členy nadradeného menného priestoru.

V dôsledku toho môžete použiť vyhľadávanie funkcií, ktoré majú nejaký druh preťaženia, kde bude existovať závislosť argumentov.

Ak chcete vidieť príklad toho, ako sa vykonáva viazanie, Stojí za to uviesť nasledujúci príklad:

Nasledujúci obrázok ukazuje proces špecializácie v šablóne nadradeného priestoru, ktorý je deklarovaný v dočasnom priestore vstavaného typu:

Využitím vstavaných priestorov je možné spravovať rôzne verzie rozhrania v štandardných knižniciach.

Je možné vytvoriť jeden nadradený priestor a zapuzdriť každé prezentované rozhranie.

Musí však byť vo formáte prílohy v zdieľanom rodičovskom priestore.

Potom sa klientsky kód automaticky priradí k novej kombinácii.

Používatelia, ktorí sú zvyknutí na starú verziu, ju môžu bez problémov používať aj naďalej.

Ak to chcete urobiť, musíte vytvoriť úplnú cestu k prílohe.

Ak chcete usporiadať prvé oznámenie, musíte použiť inline kľúč.

Pozrime sa na nasledujúci príklad dvoch možností rozhrania, kde každá má priestor. Klientsky kód má tiež schopnosť využívať nové knižnice.

Pre vizualizáciu procesu Prejdime na nasledujúci obrázok:

Všetky názvy musia byť mimoriadne jedinečné, preto sa ich dĺžka výrazne zvyšuje.

Tu však nie je možné použiť príkaz na používanie.

Je možné vytvoriť iba alias pre menný priestor.

V tomto prípade zvážte nasledujúci príklad:

Je tiež možné vytvoriť obyčajný priestor, ale nie je mu priradený alias.

Takéto územné spektrum sa nazýva anonymné.

Spravidla sa používa v situáciách, keď členovia v deklarácii musia byť neviditeľné pre kódovanie v iných objektoch.

Celá štruktúra, keď budú viditeľné všetky identifikátory, však mimo vytvoreného priestoru zostanú neviditeľné.

Nestojí to za nič, že samotný menný priestor bude neviditeľný aj mimo bloku, preto by si každý používateľ mal tento detail vopred všimnúť.

Zvyčajne sa vyžaduje použitie znalostí pre tých, ktorí pracujú vo Visual C++.

Pomocou kvalitných príkladov bude oveľa jednoduchšie pochopiť túto tému.

Čo je to menný priestor v C++?

Menný priestor je spôsob zoskupovania logicky súvisiacich vyhlásení pod spoločným názvom.

Príklad menného priestoru:

// @author Subbotin B.P..h" menný priestor prvý ( int a; float b; ) menný priestor druhý ( int a; float b; ) int _tmain (int argc, _TCHAR* argv) ( prvý::a = 1; druhý:: a = 2; prvé::b = 1,23; druhé::b = 4,56; printf("\nprvé::a = %d\n", prvé::a); printf("\ndruhé::a = %d \n", druhý::a); printf("\nprvý::b = %.2f\n", prvý::b); printf("\ndruhý::b = %.2f\n\n", sekunda::b); návrat 0; )

Dostaneme:

V príklade sú vytvorené dva menné priestory: prvý a druhý. Oba priestory obsahujú rovnaké premenné. Ale práve to, že napríklad premenná a patrí do priestoru ako prvá, neumožňuje jej zámenu s premennou z iného menného priestoru. Vyhnete sa tak konfliktom mien.

znamená, že sa používa premenná int a deklarovaná v prvom mennom priestore. Toto je príklad deklarácie použitia. Operátor :: sa nazýva operátor rozsahu.

Menné priestory sa vytvárajú pomocou kľúčového slova menného priestoru:

Najprv menný priestor ( int a; float b; )

Ak chcete použiť všetky mená z menného priestoru, môžete použiť direktívu using namespace. Príklad použitia menného priestoru std:

pomocou menného priestoru std; int _tmain(int argc, _TCHAR* argv) ( cout<<"\n using namespace std \n"<

using namespace std vám umožňuje používať mená z std namespace. std je názov štandardnej knižnice C++.

Ak v poslednom príklade odstránime reťazec pripojenia priestoru názvov pomocou priestoru názvov std, potom budeme musieť explicitne zadať názov priestoru názvov:

// @author Subbotin B.P..h" #include int _tmain(int argc, _TCHAR* argv) ( std::cout<<"\n using namespace std \n"<

Menný priestor definuje rozsah. Príklady explicitne definovali menné priestory. Tu sú ďalšie príklady menných priestorov. Rozsah v rámci funkcie je tiež priestor názvov. Rozsah globálnych premenných je zároveň menným priestorom. Trieda je tiež menný priestor.

Je možné vytvoriť menný priestor bez mena. Príklad:

// @author Subbotin B.P..h" menný priestor ( 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); návrat 0; )

To znamená použitie direktívy using namespace. Takéto menné priestory sú potrebné, aby sa predišlo možným konfliktom mien.

Ak je názov priestoru názvov príliš dlhý, môžete vytvoriť alias priestoru názvov. Príklad:

// @author Subbotin B.P..h" menný priestor underground ( int a; int b; ) menný priestor 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); návrat 0; )

menný priestor ug = underground;

predstavuje alias ug pre podzemný menný priestor. Ďalej pracujeme s aliasom.

Ak máte v úmysle použiť iba časť mien z menného priestoru, môžete túto časť vybrať do nového menného priestoru a použiť ju. Príklad:

// @author Subbotin B.P..h" namespace underground ( int a; int b; int c; float d; double e; ) namespace ug ( using underground::a; using underground::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); návrat 0; )

Tu predpokladáme, že z piatich premenných podzemného menného priestoru použijeme iba dve. Vytvoríme nový menný priestor ug, ktorý obsahuje dve deklarácie pomocou. Ďalej pracujeme s menným priestorom ug.

Menný priestor je možné zmeniť, t.j. pridajte k nemu nové inzeráty. Príklad:

// @author Subbotin B.P..h" namespace underground ( int a; int b; ) namespace 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); return 0; )

Dostaneme:

Priestory názvov môžu byť vnorené Príklad:

// @author Subbotin B.P..h" horný menný priestor ( int a; int b; vnútorný menný priestor ( float c; ) ) int _tmain (int argc, _TCHAR* argv) ( horný::a = 5; horný::b = 8 ; horné::vnútorné::c = 1,2; printf("\n horné::a = %d\n", horné::a); printf("\n horné::b = %d\n", horné ::b); printf("\n horné::vnútorné::c = %.1f\n\n", horné::vnútorné::c); návrat 0; )

Dostaneme:

V príklade menný priestor horný obsahuje vnútorný menný priestor. Všimnite si, ako sa pristupuje k poľu interného priestoru názvov:

horná::vnútorná::c = 1,2;

Pozrime sa na globálny menný priestor. Tu sa používa operátor:: bez zadania názvu priestoru. Globálny priestor názvov obsahuje globálne deklarácie vrátane zodpovedajúcich direktív použitia. Príklad globálneho menného priestoru:

// @author Subbotin B.P..h" #include pomocou menného priestoru std; int nVar; int _tmain(int argc, _TCHAR* argv) ( int nAnotherVar = 1; ::nVar = 5; cout<<"\n nAnotherVar = "<

Je dôležité vidieť rozdiel medzi používaním deklarácií a používaním direktív.
Deklarácia using sprístupňuje premennú v lokálnom rozsahu, t.j. dôjde k deklarácii miestneho názvu. Existujú dva spôsoby, ako deklarovať lokálnu premennú: normálne alebo pomocou deklarácie using.

Direktíva using sprístupňuje všetky názvy v danom priestore názvov, ale nedeklaruje ich lokálne.

Deklarácia using má prednosť pred príkazom using.

Pozrime sa na príklad:

// @author Subbotin B.P..h" menný priestor sbp ( int a; int b; int c; ) int a; int _tmain (int argc, _TCHAR* argv) ( int a; pomocou menného priestoru 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); návrat 0; )

Dostaneme:

pomocou menného priestoru sbp;

Toto je príkaz using, ktorý sprístupňuje všetky názvy v mennom priestore sbp.

Toto pracuje s lokálnou premennou a. Ak chcete priradiť hodnoty premennej a z priestoru sbp, musíte explicitne ukázať na sbp:

To isté platí pre globálnu premennú a.

Lokálna premenná a uzatvára globálne premenné s rovnakým názvom.

Teraz príklad pre deklaráciu použitia:

// @author Subbotin B.P..h" menný priestor sbp ( int a; int b; int c; ) int a; int _tmain (int argc, _TCHAR* argv) ( int a; a = 1; pomocou sbp::b; b = 2; ::a = 3; printf("\na = %d\n", a); printf("\n sbp::b = %d\n", sbp::b); printf("\ n::a = %d\n\n", ::a); návrat 0; )

Dostaneme:

Toto je vyhlásenie o používaní. Tu je premenná b deklarovaná lokálne z menného priestoru sbp. Po tomto oznámení môžete vykonať nasledujúce akcie:

ale použitie vyhlásenia pre a

by nás viedlo k chybe, pretože v príklade je lokálna premenná a už definovaná.

Pomôže.
Cesta k podpore menného priestoru v PHP bola skalnatá. Ale našťastie bol pridaný do jazyka v PHP 5.3 a štruktúra PHP kódu sa odvtedy výrazne zlepšila. Ale ako presne by sme ich mali používať?

Čo sú menné priestory?

"Nezabudnite na spätnú lomku, keď ukladáte názov priestoru názvov ako reťazec!"

Predstavte si priestor mien ako krabicu, do ktorej môžete vložiť čokoľvek: ceruzku, pravítko, papier atď. Toto sú tvoje veci. Hneď pod vašou schránkou je schránka niekoho iného a jej majiteľ v nej uchováva tie isté veci. Aby ste sa vyhli vzájomnému používaniu predmetov, rozhodnete sa škatuľky označiť tak, aby bolo jasné, čo komu patrí.

Predtým museli vývojári používať predpony podčiarknutia vo svojich triedach, funkciách a konštantách na oddelenie kódu. To je ekvivalentné tomu, že si každý označí svoje veci a uloží ich do jednej veľkej škatule. Samozrejme, je to aspoň nejaký druh organizácie, ale je to veľmi neefektívne.

Menné priestory, pomoc! Môžete deklarovať rovnakú funkciu, triedu, rozhranie a definovať konštantu v samostatných menných priestoroch bez toho, aby ste dostali fatálne chyby. Vo svojom jadre nie sú menné priestory nič iné ako hierarchicky označené bloky kódu obsahujúce bežný PHP kód.

Používate ich!

Je dôležité pochopiť, že priestory názvov používate nepriamo; Od PHP 5.3 všetky definície, ktoré ešte nie sú deklarované v užívateľsky definovaných menných priestoroch, spadajú pod globálny menný priestor.

Globálny menný priestor tiež ukladá všetky interné definície PHP, ako napríklad mysqli_connect() a triedu Exception. Pretože globálny menný priestor nemá jedinečný identifikačný názov, najčastejšie sa označuje ako globálny menný priestor.

Upozorňujeme, že použitie menného priestoru je voliteľné.
Váš PHP skript bude fungovať dobre aj bez nich a toto správanie sa veľmi skoro nezmení.

Definícia menného priestoru

Súbor obsahujúci priestor názvov musí obsahovať svoju deklaráciu na začiatku pred akýmkoľvek iným kódom. Jediná vec, ktorá môže byť deklarovaná pred názvovým priestorom, je vyhradené slovo deklarovať , pričom deklaračný výraz sa môže objaviť pred deklaráciou názvového priestoru, aby označil kódovanie súboru.

Menné priestory sú deklarované pomocou rezervovaného slovného menného priestoru. Menné priestory sa riadia rovnakými pravidlami ako ostatné identifikátory v PHP. Takže menný priestor by mal začína písmenom alebo podčiarkovníkom, za ktorým nasleduje ľubovoľný počet písmen, číslic alebo podčiarkovníkov.

Ak chcete definovať blok kódu do globálneho priestoru, môžete použiť kľúčové slovo priestor názvov bez pridania názvu.

V jednom súbore môžete použiť viacero menných priestorov.

Rovnaký menný priestor môžete použiť aj pre niekoľko rôznych súborov; proces pripojenia súborov ich automaticky spojí. Je dobrou praxou kódovania obmedziť počet definícií menného priestoru na jeden súbor, rovnako ako to robíte s triedami.

Priestory názvov sa používajú, aby sa predišlo nekonzistentným definíciám a zaviedli väčšiu flexibilitu a organizáciu do programového kódu.

Upozorňujeme, že kučeravé zátvorky sú úplne voliteľné. V skutočnosti použitie pravidla jedného menného priestoru na súbor a vynechanie zložených zátvoriek robí váš kód oveľa čistejším – nie je potrebné odsadzovať vnorený kód.

Priestory mien

Priestory názvov môžu sledovať špecifickú hierarchiu, rovnako ako adresáre v systéme súborov v počítači. Subnamespaces sú mimoriadne užitočné na organizovanie štruktúry projektu. Napríklad, ak váš projekt vyžaduje prístup k databáze, môžete umiestniť obslužný program výnimky databázy a kód obsluhy pripojenia do podpriestoru názvov databázy.

Pre flexibilitu je rozumné ukladať vnorené menné priestory do podadresárov. To pomáha štruktúrovať projekt a uľahčuje jeho použitie pre automatické nakladače, ktoré dodržiavajú štandard PSR-4.

PHP používa opačnú lomku ako oddeľovač menného priestoru.

Zaujímavý fakt: v RFC sa pri rozhodovaní, ktorý oddeľovač menného priestoru použiť, zvažovala možnosť použitia emotikonu.

// myproject/database/connection.phpMôžete použiť toľko vnorených menných priestorov, koľko chcete.

Definovanie podnázvového priestoru s vnorenými blokmi kódu nie je podporované. Nasledujúci príklad vráti závažnú chybu: "Deklarácie priestoru názvov nemožno vnoriť."

Volanie kódu z menného priestoru

Ak chcete vytvoriť novú inštanciu objektu, zavolať funkciu alebo použiť konštanty z rôznych menných priestorov, použite spätnú lomku. Existujú tri typy definícií názvov priestoru názvov:
  • Nekvalifikované meno
  • Kvalifikovaný názov
  • Plne kvalifikovaný názov

Neúplný názov

Toto je názov triedy, funkcie alebo konštanty a neobsahuje odkaz na žiadny menný priestor. Pre tých, ktorí práve začínajú pracovať s mennými priestormi, je to bežný názor.

Celé meno

Takto pristupujeme k hierarchii subnamespace; oddelené spätnou lomkou.

Príklad nižšie vráti závažnú chybu: „Závažná chyba: Trieda „MyProject\Database\MyProject\FileAccess\Input“ sa nenašla“, pretože MyProject\FileAccess\Input nie je relevantný pre priestor názvov, v ktorom sa nachádzate.

Absolútny názov

Úplné a čiastočné názvy sa používajú vo vzťahu k priestoru názvov, v ktorom sa práve nachádzate. Môžu byť použité len na definovanie prístupu na tejto úrovni alebo ponorenie hlbšie do hierarchie menného priestoru.

Ak chcete získať prístup k funkcii, triede alebo konštante, ktorá je na vyššej úrovni hierarchie, potom musíte použiť celé meno – absolútnu cestu, nie relatívnu. Hovor musí začínať spätnou lomkou. To dáva PHP vedieť, že toto volanie by sa malo uskutočniť z globálneho priestoru, a nie pristupovať k nemu vzhľadom na vašu aktuálnu polohu.

Pre interné funkcie PHP nemusíme používať celý názov. Nekvalifikované názvy funkcií a konštánt budú definované v globálnom priestore názvov, ak nie sú definované v aktuálnom priestore názvov.

Keď to vieme, môžeme teraz preťažiť interné funkcie PHP, pričom stále môžeme volať pôvodnú funkciu (alebo konštantu).

"; }

Dynamické hovory

PHP je dynamický programovací jazyk; takže túto funkciu môžete použiť na volanie kódu z menného priestoru. Je to v podstate rovnaké ako použitie názvu dynamickej triedy alebo pripojenie dynamického súboru pomocou premennej na uloženie jeho názvu. Oddeľovač názvov PHP používa rovnaké metaznaky v reťazcoch. Pri ukladaní názvu priestoru názvov ako reťazca nezabudnite na spätné lomítko!

kľúčové slovo menného priestoru

Kľúčové slovo priestoru názvov sa nepoužíva len na definovanie priestoru názvov, ale môže sa použiť aj na volanie aktuálneho priestoru názvov, funkčne podobné kľúčovému slovu self pre triedy.

__NAMESPACE__ konštanta

Rovnako ako kľúčové slovo self nemožno použiť na definovanie názvu aktuálnej triedy, kľúčové slovo priestor názvov nemožno použiť pre aktuálny priestor názvov. Preto používame konštantu __NAMESPACE__

Táto konštanta je celkom užitočná, keď sa začínate učiť menný priestor; je tiež veľmi užitočný na ladenie. Keďže ide o reťazec, možno ho použiť v spojení s dynamickými volaniami kódu, o ktorých sme hovorili vyššie.

Importujte alebo vytvorte alias názvu

nevyžaduje sa použitie v menných priestoroch

Dôležitou vlastnosťou menných priestorov v PHP je schopnosť odkazovať na externý absolútny názov pseudonym, alebo importovanie.

Importy sú veľmi užitočným a základným aspektom menných priestorov. To vám dáva možnosť používať externé balíky, ako sú knižnice, bez obáv z konfliktov mien. Import sa vykonáva pomocou kľúčového slova use. Ak chcete, môžete zadať vlastný alias pomocou kľúčového slova as.

Používať ako

Ako sa to používa

Absolútny názov môže byť prepojený s kratším nekvalifikovaným názvom, takže jeho absolútny názov nemusíte písať zakaždým, keď ho chcete použiť. Vytvorenie alebo import aliasu sa musí uskutočniť v nadradenom mennom priestore alebo v globálnom. Pokus o to v rámci metódy alebo funkcie je neplatná syntax.

Alternatívou je priradiť alias s iným názvom

Môžete tiež importovať globálne triedy, ako napríklad Exception. Pri importe nemusíte písať jeho absolútny názov.

Všimnite si, že pre názvy v priestore názvov nie je potrebná úvodná spätná lomka a jej prítomnosť sa tam neodporúča, pretože importované názvy musia byť absolútne a nie sú analyzované vzhľadom na aktuálny priestor názvov.

Hoci existuje podpora pre vyvolanie dynamického priestoru názvov, dynamický import nie je podporovaný.

Záver

Priestory názvov sa používajú na zabránenie konfliktu definícií a zavedenie väčšej flexibility a organizácie do programového kódu. Pamätajte, že nie ste povinní používať menné priestory; Táto funkcia sa používa v kombinácii s objektovo orientovaným prístupom. Dúfam, že zvážite, ako posunúť svoj (budúci) projekt PHP na ďalšiu úroveň pomocou menného priestoru.

Anotácia: Táto časť popisuje použitie a deklaráciu menných priestorov. Uvádzajú sa hlavné charakteristiky RDF, XML-Data, Document Content Description (DCD), Schema for Object-Oriented XML (SOX), Document Definition Markup Language (DDML, predtým známy ako XSchema).

Predtým sme opísali niektoré nevýhody definícií DTD, ktoré súvisia:

  1. syntax týchto definícií sa líši od syntaxe XML (konkrétne tzv. rozšíreného Backus-Naur forma, Extended Backus Naur Form);
  2. tieto definície nie sú dostatočne výpovedné;
  3. Keďže každý používateľ môže vytvárať svoje vlastné značky, je dosť pravdepodobné, že ľudia budú používať rovnaké názvy prvkov na označenie rôznych vecí. Aj keď sú významy prvkov rovnaké, ich možný obsah sa môže líšiť v závislosti od definície. Potrebujeme teda spôsob, ako definovať konkrétne použitie prvku, najmä ak v tom istom dokumente kombinujeme rôzne druhy slovníkov. Na vyriešenie tohto problému vydala W3C špecifikáciu s názvom XML Namespaces, ktorá vám umožňuje definovať kontext prvku v mennom priestore.
  4. Sú situácie, kedy je potrebné kombinovať XML dokumenty z rôznych zdrojov zodpovedajúcich rôznym definíciám DTD. Táto situácia nastáva napríklad pri popise veľkého objemu informácií, ak jednotlivé DTD nestačia na pokrytie celého objemu alebo sú ťažko zrozumiteľné. Vyskytuje sa aj v systémoch elektronického obchodu, keď sa pokúšate skombinovať údaje vášho obchodného partnera s vašimi. Môže tiež nastať situácia, keď jednoducho potrebujete pridať svoje nastavenia do existujúceho DTD, aby ste si mohli vymeniť nejaké informácie v štandardnom formáte. Žiaľ, odporúčanie XML neposkytuje spôsob, ako spojiť viacero DTD v jednom dokumente bez ich úpravy alebo vytvorenia nového DTD (pomocou externých odkazov).

Táto kapitola zahŕňa nasledujúce dva pojmy - menný priestor a XML schémy. Priestory názvov umožňujú vývojárom XML rozdeliť komplexný problém na malé kúsky a skombinovať viacero slovníkov do jedného dokumentu, aby ho úplne opísali. Pomocou schém vytvárajú návrhári slovníkov presnejšie definície, ako to bolo možné v DTD, a robia to pomocou syntaxe XML.

Tieto dva nástroje pomáhajú riešiť zložité problémy, ktoré vznikajú pri používaní XML. Priestory názvov a schémy umožňujú návrhárom a programátorom XML:

  • Lepšie organizovať slovnú zásobu na riešenie zložitých problémov;
  • Ponechať silné písanieúdaje počas transformácií do az XML;
  • Popíšte slovnú zásobu presnejšie a flexibilnejšie, ako to bolo možné pri DTD;
  • Čítajte pravidlá slovníka v XML a pristupujte k jeho definíciám bez komplikovania syntaktického analyzátora.

Miešacie slovníky

Pri navrhovaní slovníka môže mať zmysel rozdeliť globálny problém na niekoľko častí. To si vyžaduje spôsoby, ako rozdeliť veľký problém do viacerých slovníkov. Skutočným problémom, ktorý treba vyriešiť, je však zlúčenie samostatných DTD v rámci tela jedného dokumentu. Tento problém môže nastať aj vtedy, ak napríklad pracujete pre korporáciu, v ktorej s najväčšou pravdepodobnosťou už existuje súbor definícií DTD a ich použitie môže výrazne uľahčiť prácu, pretože popisujú problém tak, ako ho chápu ostatní. Často je tiež užitočné opätovne použiť definície DTD, t.j. Použitie bežných konštruktov z predtým vytvorených definícií DTD. Ak vyvíjate aplikáciu, ktorá potrebuje komunikovať so softvérom externého partnera, nemáte inú možnosť, ako opätovne použiť existujúce koncepty. Existujúce definície DTD predstavujú spoločný jazyk, ktorým sa musí hovoriť, aby mu bolo porozumené. Ak už nejaký koncept existuje, človek musí pracovať na tom, aby ho pochopil v zmysle tohto konceptu.

Keď použijete definície, ktoré sú pre vás užitočné z DTD iných vývojárov, alebo keď skombinujete segmentované DTD na vytvorenie dokumentu, ktorý popisuje zložitý problém, ak vaše dokumenty používajú prvky s rovnakými názvami, riskujete, že narazíte na problémy nejednoznačnosť a kolízie mien.

Problém sa ďalej zhoršuje pri použití inštancií mien z viacerých DTD. V tomto prípade nevieme, na ktorý prvok, na ktorý sa vzťahuje definícia DTD, sa tento problém dobre sformovaných dokumentov nazýva nejednoznačnosť. Navyše, ak to mená z dokumentu vyžadujú kontroly platnosti, môžeme urobiť našu aplikáciu veľmi mätúcou. Tento problém sa nazýva kolízia mien.

Menné priestory

Menné priestory môžu používateľovi pomôcť dvoma veľmi dôležitými spôsobmi. S ich pomocou môžete:

  • kombinovať dokumenty z dvoch alebo viacerých zdrojov bez straty istoty, že program rozlíši, z ktorého zdroja je prvok alebo atribút prevzatý;
  • Ak je to možné, povoľte užívateľskému agentovi prístup k ďalším materiálom, ako je definícia typu dokumentu (DTD) alebo iný popis prvkov a atribútov.

Menný priestor je zbierka určitých hodnôt alebo charakteristík, ktoré možno použiť v dokumentoch XML ako názvy prvkov alebo atribútov. Priestory názvov v XML sú definované identifikátorom URI (Uniform Resource Identifier) ​​(ako URI môžete použiť adresu DTD na vašom serveri). Umožňuje, aby bol každý menný priestor jedinečný.

Aby sme teda mohli efektívne využívať menné priestory v dokumente, ktorý kombinuje prvky z rôznych zdrojov, musíme definovať:

  • Odkaz na URI, ktorý popisuje použitie prvku.
  • Alias, ktorý nám umožňuje pochopiť, z ktorého menného priestoru pochádza náš prvok. Tento alias je vo forme predpony prvku (ak je napríklad alias pre neznámy prvok Knihy katalóg , prvok by sa nazýval ).

Používanie a deklarovanie menných priestorov

Deklarácia menného priestoru

Keďže v rôznych značkovacích jazykoch - implementáciách XML - možno nájsť rovnaké názvy značiek a ich atribútov, ktoré majú úplne odlišný význam, je potrebné medzi nimi nejako rozlišovať. Na tento účel majú názvy značiek a atribútov krátku predponu, ktorá je oddelená od názvu dvojbodkou. Predpona názvu je spojená s identifikátorom, ktorý definuje priestor názvov. Všetky názvy značiek a atribútov, ktorých predpony sú spojené s rovnakým identifikátorom, tvoria jeden priestor názvov, v ktorom musia byť názvy jedinečné.

Keďže chceme, aby každý rozpoznal deklaráciu priestoru názvov, keď ju uvidíme, vyhradzujeme si pre ňu špeciálne slovo. Podľa odporúčania pre priestory názvov je slovo xmlns . Hodnota atribútu je URI, ktorá určuje priestor názvov, ktorý sa má použiť. Toto je často adresa URL definície DTD, ale nemusí to tak byť vždy. Predpona a identifikátor priestoru názvov sú definované atribútom xmlns takto:

Ako vidíte, predpona ntb bola práve definovaná, ale už sa dá použiť v názve ntb: notebook . V budúcnosti budú názvy značiek a atribútov, ktoré chceme priradiť k priestoru názvov http://some.firm.com/2003/ntbml, s predponou ntb, napríklad:

Gorelovo

Okrem toho sa v jednej značke môže vyskytovať niekoľko menných priestorov. Nižšie je uvedený príklad zmiešania viacerých menných priestorov:

Prvok kniha pochádza z menného priestoru katalógu a atribút ISBN pochádza z objednávky .

Názov spolu s predponou, napr

nazývaný rozšírený, kvalifikovaný alebo kvalifikovaný názov (OName. Qualified Name). Časť mena napísaná za dvojbodkou sa nazýva miestna časť mena.

Nomenklatúra názvov webových zdrojov môže byť mätúca. Uniform Resource Locator ( Uniform Resource Locator, URL) označuje zdroj z hľadiska prístupového protokolu a sieťového umiestnenia. Uniform Resource Identifier ( Uniform Resource Identifier, URI) je jedinečný názov pre nejaký zdroj. Pozrite sa na URI jednoducho ako na jedinečný reťazec znakov, ktorý identifikuje menný priestor.

Podľa pravidiel SGML a XML môže byť dvojbodka použitá v menách ako obyčajný znak, takže meno s predponou je len trik; každý program, ktorý „nepozná“ menný priestor, analyzuje dokument, zaobchádza kvalifikovaný názov ako obyčajný názov. Z toho najmä vyplýva, že v vyhlásenie o type dokumentu Predpony názvov (Deklarácia typu dokumentu) nemožno vynechať.

Atribút xmlns sa môže objaviť na akomkoľvek prvku XML, nielen na koreňovom prvku. Predponu, ktorú definuje, možno použiť v elemente, v ktorom je zapísaný atribút xmlns a vo všetkých elementoch v ňom vnorených. Okrem toho je možné v jednom prvku definovať viacero menných priestorov.

Vo vnorených prvkoch je možné menný priestor prepísať priradením predpony k inému identifikátoru.

Vzhľad názvu značky bez predpony v dokumente, ktorý používa priestor názvov, znamená, že názov patrí do predvoleného priestoru názvov.

Dobre navrhnutý dokument by mal používať menné priestory pre všetky svoje prvky.

Predpony začínajúce znakmi xml sú v každom prípade vyhradené pre samotný jazyk XML. Predpona xmlns sa používa na priradenie inej, definovanej predpony k jej identifikátoru menného priestoru. Predpona xmlns nemusí byť definovaná, je zavedená odporúčaním „Menové priestory v XML“ a je tam spojená s identifikátorom menného priestoru http://www.w3.ori/2000 /xmlns/.

Ďalšia predpona, xml, je spojená s rovnakým odporúčaním s identifikátorom http://www.w3.org/XML/1998/namespace. Tiež nie je potrebné ho definovať v dokumente XML. K týmto identifikátorom nemožno priradiť žiadnu inú predponu. Zachovajte pokyny na zachovanie nedotknutých medzier. To je dôležité pre niektoré texty, ako sú programové kódy. Predvolená hodnota ponecháva medzery na uvážení obsluhy.

Rozsah

Deklarácie menného priestoru majú rozsah, rovnako ako deklarácie premenných v programovacích jazykoch. Je to dôležité, pretože menné priestory nie sú vždy deklarované na začiatku dokumentu XML; niekedy sú deklarované v nasledujúcich sekciách. Deklarácia menného priestoru sa vzťahuje na prvok, v ktorom sa vyskytuje, ako aj na potomkov tohto prvku, aj keď tam nie je explicitne definovaná. Názov môže odkazovať na priestor názvov iba vtedy, ak je použitý v rámci jeho deklarácie.

Budeme však musieť zmiešať aj rozsahy menných priestorov na prvkoch, ktoré by inak zdedili iné menné priestory. V tejto súvislosti sú definované dva spôsoby deklarovania rozsahu: štandardný a kvalifikovaný.

Predvolený rozsah

Ako sa dalo očakávať, dávať predponu každému názvu v dokumente sa rýchlo stáva únavným. V skutočnosti zavedením konceptu rozsahu názvu môžeme v našom dokumente zmiešať veľké množstvo predpôn. Ak definujeme predvolený priestor názvov, predpokladá sa, že vlastní všetky nekvalifikované názvy v rozsahu jeho deklarácie. Predvolený priestor názvov deklarovaný v koreňovom prvku sa teda považuje za predvolený pre celý dokument a možno ho prepísať iba konkrétnejším priestorom názvov deklarovaným v dokumente.

Ak chcete, aby bol priestor názvov predvoleným priestorom názvov pre rozsah, jednoducho vynechajte deklaráciu predpony.

Ak je predpona deklarovaná a potom použitá v spojení s názvom, menný priestor sa považuje za explicitne stanovený. Ak chcete k priestoru názvov priradiť nekvalifikovaný názov, musíte deklarovať predvolený priestor, ktorý obsahuje nekvalifikovaný názov (bez predpony).

Kvalifikovaný rozsah

Vyššie uvedená metóda funguje dobre, ak dokážete jasne oddeliť svoje menné priestory. Niekedy je však potrebné do dokumentu zahrnúť jednotlivé mená z externých menných priestorov. Namiesto deklarovania názvových priestorov pre celý rozsah môžete použiť kvalifikované názvy. Na začiatku dokumentu deklarujte priestory názvov, ktoré potrebujete, a potom ich kvalifikujte na mieste použitia.



 


Čítať:



Typovaný programovací jazyk Typ alebo špecifikátory formátu alebo znaky konverzie alebo riadiace znaky

Typovaný programovací jazyk Typ alebo špecifikátory formátu alebo znaky konverzie alebo riadiace znaky

Programovací jazyk C++ Posledná aktualizácia: 28.08.2017 Programovací jazyk C++ je kompilovaný jazyk na vysokej úrovni...

Pracovný harmonogram ruskej pošty na novoročné sviatky Poštová práca na novoročné sviatky

Pracovný harmonogram ruskej pošty na novoročné sviatky Poštová práca na novoročné sviatky

Ruská pošta v 21. storočí sa stala univerzálnou inštitúciou, ktorá pomáha nielen prijímať listy a balíky. Platby energií, dôchodky,...

Tass: dekódovanie skratiek

Tass: dekódovanie skratiek

Tento výraz pochádza z talianskej abbreviatura a latinského brevis – krátky. V starých knihách a rukopisoch to bol názov pre skrátené...

Prázdne šablóny certifikátov na stiahnutie Šablóna čestného certifikátu na tlač

Prázdne šablóny certifikátov na stiahnutie Šablóna čestného certifikátu na tlač

Zdravím vás, drahý čitateľ! Dnes vám poviem, ako vytvoriť list v programe Word. Vo svojej práci som musel napísať veľké množstvo...

feed-image RSS