Aliaser och importering — Använda namnrymder: Aliaser/importering

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

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/