PHP.nl

Namespaces and dynamic language features

Laatst bijgewerkt:

Namespaces en dynamische taalfeatures

PHP's implementatie van namespaces is beïnvloed door de dynamische aard van de programmeertaal. Om code zoals het volgende voorbeeld om te zetten naar namespaced code:

Moet men de volledig gekwalificeerde naam gebruiken (klasnaam met namespace-prefix). Merk op dat er geen verschil is tussen een gekwalificeerde en een volledig gekwalificeerde naam binnen een dynamische klassenaam, functienaam of constante naam, de leidende backslash is niet nodig.

Voorbeeld: Dynamisch toegang krijgen tot elementen

example1.php:

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

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

Voorbeeld: Dynamisch toegang krijgen tot namespaced elementen

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

/* let op dat als je dubbele aanhalingstekens gebruikt, "\\namespacename\\classname" moet worden gebruikt */
$a = '\namespacename\classname';
$obj = new $a; // prints namespacename\classname::__construct
$a = 'namespacename\classname';
$obj = new $a; // prints namespacename\classname::__construct
$b = 'namespacename\funcname';
$b(); // prints namespacename\funcname
$b = '\namespacename\funcname';
$b(); // prints namespacename\funcname
echo constant('\namespacename\constname'), "\n"; // prints namespaced
echo constant('namespacename\constname'), "\n"; // prints namespaced
?>

Zorg ervoor dat je de opmerking over het ontsnappen van namespace-namen in strings leest.

Documentatie