Namespaces and dynamic language features
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.