Namnrymder och dynamiska språkfunktioner

Från Wiki.linux.se
Version från den 19 augusti 2024 kl. 16.26 av Admin (diskussion | bidrag) (Skapade sidan med '== Namnrymder och dynamiska språkliga funktioner == (PHP 5 >= 5.3.0, PHP 7, PHP 8) PHP:s implementering av namnrymder påverkas av dess dynamiska natur som programmeringsspråk. Därför, för att omvandla kod som följande exempel till kod med namnrymder: === Exempel #1 Dynamisk åtkomst till element === <pre> <?php class classname { function __construct() { echo __METHOD__,"\n"; } } function funcname() { echo __FUNCTION__,"\n"; } const const...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Namnrymder och dynamiska språkliga funktioner

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

PHP:s implementering av namnrymder påverkas av dess dynamiska natur som programmeringsspråk. Därför, för att omvandla kod som följande exempel till kod med namnrymder:

Exempel #1 Dynamisk åtkomst till element

<?php
class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "global";

$a = 'classname';
$obj = new $a; // skriver ut classname::__construct
$b = 'funcname';
$b(); // skriver ut funcname
echo constant('constname'), "\n"; // skriver ut global
?>

Man måste använda det fullständigt kvalificerade namnet (klassnamn med namnrymdsprefix). Notera att eftersom det inte finns någon skillnad mellan ett kvalificerat och ett fullständigt kvalificerat namn inuti ett dynamiskt klassnamn, funktionsnamn eller konstantnamn, är det ledande omvänt snedstrecket inte nödvändigt.

Exempel #2 Dynamisk åtkomst till element med namnrymder

<?php
namespace namespacename;
class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "namespaced";

/* notera att om man använder dubbla citattecken måste "\\namespacename\\classname" användas */
$a = '\namespacename\classname';
$obj = new $a; // skriver ut namespacename\classname::__construct
$a = 'namespacename\classname';
$obj = new $a; // skriver också ut namespacename\classname::__construct
$b = 'namespacename\funcname';
$b(); // skriver ut namespacename\funcname
$b = '\namespacename\funcname';
$b(); // skriver också ut namespacename\funcname
echo constant('\namespacename\constname'), "\n"; // skriver ut namespaced
echo constant('namespacename\constname'), "\n"; // skriver också ut namespaced
?>

Var noga med att läsa noteringen om att undkomma namnrymdsnamn i strängar.

Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.namespaces.dynamic.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/