Namnupplösningsregler
Version från den 19 augusti 2024 kl. 16.41 av Admin (diskussion | bidrag)
Namnupplösningsregler
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
För att förstå dessa namnupplösningsregler, här är några viktiga definitioner:
Namnrymdsdefinitioner
- Okvalificerat namn: Detta är en identifierare utan en namnrymdsseparator, till exempel Foo.
- Kvalificerat namn: Detta är en identifierare med en namnrymdsseparator, till exempel Foo\Bar.
- Fullt kvalificerat namn: Detta är en identifierare med en namnrymdsseparator som börjar med en namnrymdsseparator, till exempel \Foo\Bar. Namnrymden \Foo är också ett fullt kvalificerat namn.
- Relativt namn: Detta är en identifierare som börjar med namespace, till exempel namespace\Foo\Bar.
Namn upplöses enligt följande regler:
- Fullt kvalificerade namn löses alltid till namnet utan ledande namnrymdsseparator. Till exempel, \A\B löses till A\B.
- Relativa namn löses alltid till namnet med namespace ersatt av den aktuella namnrymden. Om namnet förekommer i den globala namnrymden, tas namespace\ prefixet bort. Till exempel namespace\A inom namnrymden X\Y löses till X\Y\A. Samma namn inom den globala namnrymden löses till A.
- För kvalificerade namn översätts det första segmentet av namnet enligt den aktuella klass-/namnrymdsimporttabellen. Till exempel, om namnrymden A\B\C importeras som C, översätts namnet C\D\E till A\B\C\D\E.
- För kvalificerade namn, om ingen importrule gäller, läggs den aktuella namnrymden till namnet. Till exempel, namnet C\D\E inom namnrymden A\B, löses till A\B\C\D\E.
- För okvalificerade namn översätts namnet enligt den aktuella importtabellen för den respektive symboltypen. Detta innebär att namn som liknar klasser översätts enligt klass-/namnrymdsimporttabellen, funktionsnamn enligt funktionens importtabell och konstanter enligt konstantens importtabell. Till exempel, efter use A\B\C; kommer en användning som new C() att lösas till namnet A\B\C(). På samma sätt, efter use function A\B\foo; kommer en användning som foo() att lösas till namnet A\B\foo.
- För okvalificerade namn, om ingen importrule gäller och namnet refererar till en klassliknande symbol, läggs den aktuella namnrymden till. Till exempel new C() inom namnrymden A\B löses till namnet A\B\C.
- För okvalificerade namn, om ingen importrule gäller och namnet refererar till en funktion eller konstant och koden är utanför den globala namnrymden, löses namnet vid körning. Om koden är i namnrymden A\B, här är hur ett anrop till funktionen foo() löses:
* Den söker efter en funktion från den aktuella namnrymden: A\B\foo(). * Den försöker hitta och anropa den globala funktionen foo().
Exempel #1 Namnupplösningar illustrerade
<?php namespace A; use B\D, C\E as F; // funktionsanrop foo(); // försöker först anropa "foo" definSidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.rules.php
PHP
Språkreferens
Språkreferens#Namnrymder
Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/