Aliaser och importering — Använda namnrymder: Aliaser/importering: Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '= Sidslut = Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.importing.php <BR>PHP <BR>Språkreferens <BR>Språkreferens#Namnrymder Kategori:Php<br> <BR> <hr> 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/') |
Admin (diskussion | bidrag) |
||
Rad 1: | Rad 1: | ||
Här är den översatta texten på svenska i mediawiki-format: | |||
```mediawiki | |||
== Använda namnrymder: Aliaser/Importering == | |||
(PHP 5 >= 5.3.0, PHP 7, PHP 8) | |||
Möjligheten att referera till ett externt fullständigt kvalificerat namn med en alias eller genom att importera, är en viktig funktion i namnrymder. Detta liknar förmågan hos Unix-baserade filsystem att skapa symboliska länkar till en fil eller en katalog. | |||
PHP kan aliasera (/importera) konstanter, funktioner, klasser, gränssnitt, traits, enumar och namnrymder. | |||
Aliaser skapas med användning av nyckelordet `use`. Här är ett exempel som visar alla fem typer av importering: | |||
=== Exempel #1 Importering/aliasering med `use`-operatorn === | |||
<pre> | |||
<?php | |||
namespace foo; | |||
use My\Full\Classname as Another; | |||
// detta är samma sak som use My\Full\NSname as NSname | |||
use My\Full\NSname; | |||
// importera en global klass | |||
use ArrayObject; | |||
// importera en funktion | |||
use function My\Full\functionName; | |||
// aliasera en funktion | |||
use function My\Full\functionName as func; | |||
// importera en konstant | |||
use const My\Full\CONSTANT; | |||
$obj = new namespace\Another; // instansierar objekt av klassen foo\Another | |||
$obj = new Another; // instansierar objekt av klassen My\Full\Classname | |||
NSname\subns\func(); // anropar funktionen My\Full\NSname\subns\func | |||
$a = new ArrayObject(array(1)); // instansierar objekt av klassen ArrayObject | |||
// utan "use ArrayObject" skulle vi instansiera ett objekt av klassen foo\ArrayObject | |||
func(); // anropar funktionen My\Full\functionName | |||
echo CONSTANT; // skriver ut värdet av My\Full\CONSTANT | |||
?> | |||
</pre> | |||
Observera att för namnrymdd namn (fullständigt kvalificerade namnrymddnamn som innehåller namnrymdsseparator, såsom Foo\Bar, till skillnad från globala namn som inte gör det, såsom FooBar), är den inledande backslashen onödig och inte rekommenderad, eftersom importnamn måste vara fullständigt kvalificerade och inte bearbetas relativt till den aktuella namnrymden. | |||
PHP stöder dessutom en bekvämlighetsgenväg för att placera flera `use`-satser på samma rad. | |||
=== Exempel #2 Importering/aliasering med `use`-operatorn, flera `use`-satser kombinerade === | |||
<pre> | |||
<?php | |||
use My\Full\Classname as Another, My\Full\NSname; | |||
$obj = new Another; // instansierar objekt av klassen My\Full\Classname | |||
NSname\subns\func(); // anropar funktionen My\Full\NSname\subns\func | |||
?> | |||
</pre> | |||
Importering utförs vid kompileringstid, och påverkar därför inte dynamiska klass-, funktions- eller konstantnamn. | |||
=== Exempel #3 Importering och dynamiska namn === | |||
<pre> | |||
<?php | |||
use My\Full\Classname as Another, My\Full\NSname; | |||
$obj = new Another; // instansierar objekt av klassen My\Full\Classname | |||
$a = 'Another'; | |||
$obj = new $a; // instansierar objekt av klassen Another | |||
?> | |||
</pre> | |||
Dessutom påverkar importering endast icke-kvalificerade och kvalificerade namn. Fullständigt kvalificerade namn är absoluta och påverkas inte av importering. | |||
=== Exempel #4 Importering och fullständigt kvalificerade namn === | |||
<pre> | |||
<?php | |||
use My\Full\Classname as Another, My\Full\NSname; | |||
$obj = new Another; // instansierar objekt av klassen My\Full\Classname | |||
$obj = new \Another; // instansierar objekt av klassen Another | |||
$obj = new Another\thing; // instansierar objekt av klassen My\Full\Classname\thing | |||
$obj = new \Another\thing; // instansierar objekt av klassen Another\thing | |||
?> | |||
</pre> | |||
== Omfattningsregler för importering == | |||
Nyckelordet `use` måste deklareras i den yttersta omfattningen av en fil (den globala omfattningen) eller inuti namnrymdsdeklarationer. Detta beror på att importering utförs vid kompileringstid och inte vid körning, så det kan inte vara blockomfattat. Följande exempel visar en olaglig användning av nyckelordet `use`: | |||
=== Exempel #5 Olaglig importeringsregel === | |||
<pre> | |||
<?php | |||
namespace Languages; | |||
function toGreenlandic() | |||
{ | |||
use Languages\Danish; | |||
// ... | |||
} | |||
?> | |||
</pre> | |||
'''Notera:''' | |||
Importeringsregler gäller per fil, vilket innebär att inkluderade filer INTE kommer att ärva föräldrafilens importeringsregler. | |||
== Gruppanvändningsdeklarationer == | |||
Klasser, funktioner och konstanter som importeras från samma namnrymd kan grupperas tillsammans i en enda `use`-deklaration. | |||
<pre> | |||
<?php | |||
use some\namespace\ClassA; | |||
use some\namespace\ClassB; | |||
use some\namespace\ClassC as C; | |||
use function some\namespace\fn_a; | |||
use function some\namespace\fn_b; | |||
use function some\namespace\fn_c; | |||
use const some\namespace\ConstA; | |||
use const some\namespace\ConstB; | |||
use const some\namespace\ConstC; | |||
// är ekvivalent med följande grupperade `use`-deklaration | |||
use some\namespace\{ClassA, ClassB, ClassC as C}; | |||
use function some\namespace\{fn_a, fn_b, fn_c}; | |||
use const some\namespace\{ConstA, ConstB, ConstC}; | |||
?> | |||
</pre> | |||
``` | |||
= Sidslut = | = Sidslut = | ||
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.importing.php | Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.importing.php |
Nuvarande version från 19 augusti 2024 kl. 16.30
Här är den översatta texten på svenska i mediawiki-format:
```mediawiki
Använda namnrymder: Aliaser/Importering
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Möjligheten att referera till ett externt fullständigt kvalificerat namn med en alias eller genom att importera, är en viktig funktion i namnrymder. Detta liknar förmågan hos Unix-baserade filsystem att skapa symboliska länkar till en fil eller en katalog.
PHP kan aliasera (/importera) konstanter, funktioner, klasser, gränssnitt, traits, enumar och namnrymder.
Aliaser skapas med användning av nyckelordet `use`. Här är ett exempel som visar alla fem typer av importering:
Exempel #1 Importering/aliasering med `use`-operatorn
<?php namespace foo; use My\Full\Classname as Another; // detta är samma sak som use My\Full\NSname as NSname use My\Full\NSname; // importera en global klass use ArrayObject; // importera en funktion use function My\Full\functionName; // aliasera en funktion use function My\Full\functionName as func; // importera en konstant use const My\Full\CONSTANT; $obj = new namespace\Another; // instansierar objekt av klassen foo\Another $obj = new Another; // instansierar objekt av klassen My\Full\Classname NSname\subns\func(); // anropar funktionen My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // instansierar objekt av klassen ArrayObject // utan "use ArrayObject" skulle vi instansiera ett objekt av klassen foo\ArrayObject func(); // anropar funktionen My\Full\functionName echo CONSTANT; // skriver ut värdet av My\Full\CONSTANT ?>
Observera att för namnrymdd namn (fullständigt kvalificerade namnrymddnamn som innehåller namnrymdsseparator, såsom Foo\Bar, till skillnad från globala namn som inte gör det, såsom FooBar), är den inledande backslashen onödig och inte rekommenderad, eftersom importnamn måste vara fullständigt kvalificerade och inte bearbetas relativt till den aktuella namnrymden.
PHP stöder dessutom en bekvämlighetsgenväg för att placera flera `use`-satser på samma rad.
Exempel #2 Importering/aliasering med `use`-operatorn, flera `use`-satser kombinerade
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instansierar objekt av klassen My\Full\Classname NSname\subns\func(); // anropar funktionen My\Full\NSname\subns\func ?>
Importering utförs vid kompileringstid, och påverkar därför inte dynamiska klass-, funktions- eller konstantnamn.
Exempel #3 Importering och dynamiska namn
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instansierar objekt av klassen My\Full\Classname $a = 'Another'; $obj = new $a; // instansierar objekt av klassen Another ?>
Dessutom påverkar importering endast icke-kvalificerade och kvalificerade namn. Fullständigt kvalificerade namn är absoluta och påverkas inte av importering.
Exempel #4 Importering och fullständigt kvalificerade namn
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instansierar objekt av klassen My\Full\Classname $obj = new \Another; // instansierar objekt av klassen Another $obj = new Another\thing; // instansierar objekt av klassen My\Full\Classname\thing $obj = new \Another\thing; // instansierar objekt av klassen Another\thing ?>
Omfattningsregler för importering
Nyckelordet `use` måste deklareras i den yttersta omfattningen av en fil (den globala omfattningen) eller inuti namnrymdsdeklarationer. Detta beror på att importering utförs vid kompileringstid och inte vid körning, så det kan inte vara blockomfattat. Följande exempel visar en olaglig användning av nyckelordet `use`:
Exempel #5 Olaglig importeringsregel
<?php namespace Languages; function toGreenlandic() { use Languages\Danish; // ... } ?>
Notera:
Importeringsregler gäller per fil, vilket innebär att inkluderade filer INTE kommer att ärva föräldrafilens importeringsregler.
Gruppanvändningsdeklarationer
Klasser, funktioner och konstanter som importeras från samma namnrymd kan grupperas tillsammans i en enda `use`-deklaration.
<?php use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c; use const some\namespace\ConstA; use const some\namespace\ConstB; use const some\namespace\ConstC; // är ekvivalent med följande grupperade `use`-deklaration use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC}; ?>
```
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.importing.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/