Using namespaces: fallback to global function/constant

Оновлено: 09.05.2023

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

Усередині простору імен, коли PHP зустрічає в контексті імені класу, функції або константи ім'я без умовного позначення, він розпізнає їх з різними пріоритетами. Імена класів завжди перетворюються у поточне ім'я простору імен. Таким чином, щоб отримати доступ до внутрішніх або користувацьких класів, що не належать до простору імен, ви повинні звертатися до них з повним іменем, як у випадку з класом in:

Приклад #1 Доступ до глобальних класів всередині простору імен

<?php
namespace A\B\C;
class Exception extends \Exception {}

$a = new Exception('hi'); // $a is an object of class A\B\C\Exception
$b = new \Exception('hi'); // $b is an object of class Exception

$c = new ArrayObject; // fatal error, class A\B\C\ArrayObject not found
?>

Для функцій і констант PHP повернеться до глобальних функцій або констант, якщо функція або константа в просторі імен не існує.

Приклад #2 Відновлення глобальних функцій/констант всередині простору імен

<?php
namespace A\B\C;

const E_ERROR = 45;
function strlen($str)
{
    return \strlen($str) - 1;
}

echo E_ERROR, "\n"; // prints "45"
echo INI_ALL, "\n"; // prints "7" - falls back to global INI_ALL

echo strlen('hi'), "\n"; // prints "1"
if (is_array('hi')) { // prints "is not array"
    echo "is array\n";
} else {
    echo "is not array\n";
}
?>