Основная причина, вероятно, состоит в том, что это сделает результат совершенно непредсказуемым. Значение переменной может быть передано в качестве аргумента другой функции / методу в другом пространстве имен, которое может передавать его дальше в другое пространство имен. Если это значение будет рассматриваться как относительное имя, это будет означать совершенно разные вещи в зависимости от контекста. Возьмите этот пример :
namespace A {
function test() {
echo __FUNCTION__, "\n";
}
function run($callback) {
$callback();
}
}
namespace B {
function test() {
echo __FUNCTION__, "\n";
}
function run($callback) {
$callback();
}
}
namespace {
function test() {
echo __FUNCTION__, "\n";
}
function run($callback) {
$callback();
}
$callback = 'test';
run($callback);
A\run($callback);
B\run($callback);
$callback = 'A\test';
run($callback);
A\run($callback);
B\run($callback);
}
Теперь обратный вызов обрабатывается всегда одинаковым образом:
test
test
test
A\test
A\test
A\test
Если вы интерпретируете динамический c обратный вызов как относительный имя, вы получите чистое безумие, где каждый вызов даст вам разные результаты:
test
A\test
B\test
A\test
A\A\test
B\A\test
Обработка строк как FQN делает его намного проще и более предсказуемым.