Grundläggande: Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
||
(5 mellanliggande sidversioner av samma användare visas inte) | |||
Rad 1: | Rad 1: | ||
= | == 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 <code>foo.txt</code>. Detta löser sig till <code>currentdirectory/foo.txt</code> där <code>currentdirectory</code> är den katalog som för närvarande används. Om den aktuella katalogen är <code>/home/foo</code>, kommer namnet att lösas till <code>/home/foo/foo.txt</code>. | |||
# Relativ sökväg som <code>subdirectory/foo.txt</code>. Detta löser sig till <code>currentdirectory/subdirectory/foo.txt</code>. | |||
# Absolut sökväg som <code>/main/foo.txt</code>. Detta löser sig till <code>/main/foo.txt</code>. | |||
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 <code>$a = new foo();</code> eller <code>foo::staticmethod();</code>. Om den aktuella namnrymden är <code>currentnamespace</code>, löses detta till <code>currentnamespace\foo</code>. Om koden är global, icke-namnrymd kod, löses detta till <code>foo</code>. 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 <code>$a = new subnamespace\foo();</code> eller <code>subnamespace\foo::staticmethod();</code>. Om den aktuella namnrymden är <code>currentnamespace</code>, löses detta till <code>currentnamespace\subnamespace\foo</code>. Om koden är global, icke-namnrymd kod, löses detta till <code>subnamespace\foo</code>. | |||
* Fullständigt kvalificerat namn, eller ett prefixerat namn med globalt prefixoperatör som <code>$a = new \currentnamespace\foo();</code> eller <code>\currentnamespace\foo::staticmethod();</code>. Detta löses alltid till det bokstavliga namn som specificeras i koden, <code>currentnamespace\foo</code>. | |||
Här är ett exempel på de tre typerna av syntax i faktisk kod: | |||
< | <pre> | ||
file1.php | |||
<?php | |||
namespace Foo\Bar\subnamespace; | |||
const FOO = 1; | |||
function foo() {} | |||
class foo | |||
{ | |||
static function staticmethod() {} | |||
} | |||
?> | |||
</pre> | |||
</ | |||
< | <pre> | ||
file2.php | |||
<?php | |||
namespace Foo\Bar; | |||
include 'file1.php'; | |||
function | 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 | |||
?> | |||
</pre> | |||
// | Observera att för att komma åt någon global klass, funktion eller konstant kan ett fullständigt kvalificerat namn användas, till exempel <code>\strlen()</code> eller <code>\Exception</code> eller <code>\INI_ALL</code>. | ||
=== Exempel #1: Åtkomst till globala klasser, funktioner och konstanter inom en namnrymd === | |||
<pre> | |||
<?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 | |||
?> | |||
</pre> | |||
// | = Sidslut = | ||
// | Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.basics.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/ |
Nuvarande version från 19 augusti 2024 kl. 10.49
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.txt
dä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/