Grundläggande
Användning av namnrymder: Grunder
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Innan vi diskuterar användningen av namnrymder är det viktigt att förstå hur PHP vet vilken element i namnrymden din kod begär. En enkel analogi kan göras mellan PHP-namnrymder och ett filsystem. Det finns tre sätt att komma åt en fil i ett filsystem:
- **Relativt filnamn** som
foo.txt. Detta löser sig tillcurrentdirectory/foo.txtdärcurrentdirectoryär den katalog som för närvarande används. Om den aktuella katalogen är/home/foo, kommer namnet att lösas till/home/foo/foo.txt. - **Relativ sökväg** som
subdirectory/foo.txt. Detta löser sig tillcurrentdirectory/subdirectory/foo.txt. - **Absolut sökväg** som
/main/foo.txt. Detta löser sig till/main/foo.txt.
Samma princip kan tillämpas på namnrymdselement i PHP. Till exempel kan ett klassnamn refereras på tre sätt:
- **Okvalificerat namn**, eller ett oprefixerat klassnamn som
$a = new foo();ellerfoo::staticmethod();. Om den aktuella namnrymden ärcurrentnamespace, löses detta tillcurrentnamespace\foo. Om koden är global, icke-namnrymd kod, löses detta tillfoo. En varning: okvalificerade namn för funktioner och konstanter kommer att lösas till globala funktioner och konstanter om den namnrymda funktionen eller konstanten inte är definierad. Se Använda namnrymder: fallback till global funktion/konstant för detaljer. - **Kvalificerat namn**, eller ett prefixerat klassnamn som
$a = new subnamespace\foo();ellersubnamespace\foo::staticmethod();. Om den aktuella namnrymden ärcurrentnamespace, löses detta tillcurrentnamespace\subnamespace\foo. Om koden är global, icke-namnrymd kod, löses detta tillsubnamespace\foo. - **Fullständigt kvalificerat namn**, eller ett prefixerat namn med globalt prefixoperatör som
$a = new \currentnamespace\foo();eller\currentnamespace\foo::staticmethod();. Detta löses alltid till det bokstavliga namn som specificeras i koden,currentnamespace\foo.
Här är ett exempel på de tre typerna av syntax i faktisk kod:
'''file1.php'''
<?php
namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo() {}
class foo
{
static function staticmethod() {}
}
?>
'''file2.php'''
<?php
namespace Foo\Bar;
include 'file1.php';
const FOO = 2;
function foo() {}
class foo
{
static function staticmethod() {}
}
/* Okvalificerat namn */
foo(); // löses till funktionen Foo\Bar\foo
foo::staticmethod(); // löses till klassen Foo\Bar\foo, metod staticmethod
echo FOO; // löses till konstanten Foo\Bar\FOO
/* Kvalificerat namn */
subnamespace\foo(); // löses till funktionen Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // löses till klassen Foo\Bar\subnamespace\foo,
// metod staticmethod
echo subnamespace\FOO; // löses till konstanten Foo\Bar\subnamespace\FOO
/* Fullständigt kvalificerat namn */
\Foo\Bar\foo(); // löses till funktionen Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // löses till klassen Foo\Bar\foo, metod staticmethod
echo \Foo\Bar\FOO; // löses till konstanten Foo\Bar\FOO
?>
Observera att för att komma åt någon global klass, funktion eller konstant kan ett fullständigt kvalificerat namn användas, till exempel \strlen() eller \Exception eller \INI_ALL.
Exempel #1: Åtkomst till globala klasser, funktioner och konstanter inom en namnrymd
<?php
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hi'); // anropar den globala funktionen strlen
$b = \INI_ALL; // åtkomst till den globala konstanten INI_ALL
$c = new \Exception('error'); // instansierar den globala klassen Exception
?>
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.basics.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/