Пространства имён и динамические особенности языка

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

На реализацию пространств имён в PHP повлияли и динамические свойства языка. Поэтому, для преобразования кода наподобие следующего примера в код, который сработает внутри пространства имён:…

Пример #1 Динамически доступные элементы

example1.php:

<?php

class classname
{
function
__construct()
{
echo
__METHOD__,"\n";
}
}

function
funcname()
{
echo
__FUNCTION__,"\n";
}

const
constname = "global";

$a = 'classname';
$obj = new $a(); // Выводит classname::__construct

$b = 'funcname';
$b(); // Выводит funcname

echo constant('constname'), "\n"; // Выводит global
…потребуется указать абсолютное имя — название класса с префиксом пространства имён. Обратите внимание, поскольку между полным и абсолютным именем внутри динамического названия класса, функции или константы нет разницы, начальный обратный слеш не требуется.

Пример #2 Динамически доступные элементы пространства имён

<?php

namespace namespacename;

class
classname
{
function
__construct()
{
echo
__METHOD__,"\n";
}
}

function
funcname()
{
echo
__FUNCTION__,"\n";
}

const
constname = "namespaced";

include
'example1.php';

$a = 'classname';
$obj = new $a; // Выводит: classname::__construct
$b = 'funcname';
$b(); // Выводит: funcname
echo constant('constname'), "\n"; // Выводит: global

/* Обратите внимание, что в двойных кавычках символ обратного слеша потребуется заэкранировать. Например: "\\namespacename\\classname" */
$a = '\namespacename\classname';
$obj = new $a; // Выводит: namespacename\classname::__construct
$a = 'namespacename\classname';
$obj = new $a; // Тоже выводит: namespacename\classname::__construct
$b = 'namespacename\funcname';
$b(); // Выводит: namespacename\funcname
$b = '\namespacename\funcname';
$b(); // Тоже выводит: namespacename\funcname
echo constant('\namespacename\constname'), "\n"; // Выводит: namespaced
echo constant('namespacename\constname'), "\n"; // Тоже выводит: namespaced

Обязательно прочитайте примечание об экранировании имён пространства имён в строках.