Namnupplösningsregler: Skillnad mellan sidversioner
Hoppa till navigering
Hoppa till sök
Admin (diskussion | bidrag) (Skapade sidan med '== 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...') |
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
||
Rad 5: | Rad 5: | ||
=== Namnrymdsdefinitioner === | === 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: | Namn upplöses enligt följande regler: | ||
Rad 31: | Rad 31: | ||
// funktionsanrop | // funktionsanrop | ||
foo(); // försöker först anropa "foo" | foo(); // försöker först anropa "foo" defin | ||
= Sidslut = | = Sidslut = | ||
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.rules.php | Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.rules.php |
Versionen från 19 augusti 2024 kl. 16.41
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/