я использую PHP 7.2.1
Рассмотрим код ниже:
<?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";
}
?>
Выход :
45
7
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 262144 bytes) in ... on line 7
Насколько мне известно, PHP вернется к глобальной функции, если функция пространства имен не существует.
Тогда почему я получаю Фатальная ошибка Вот?
Кроме того, фатальная ошибка, которую я получил, означает, что программа работает в бесконечном цикле? Если да, то как? Если нет, каково точное значение этой фатальной ошибки?
Да, код, который вы используете, работает в бесконечном цикле. Вот как выглядят результаты моего теста (немного более информативно):
~ » php test.php
45
7
PHP Fatal error: Maximum function nesting level of '256' reached,
aborting! in /Users/xxx/test.php on line 5
Если вы уже перезаписываете функцию std php (которую я бы не рекомендовал), вам нужно явно запустить функцию std, добавив перед ней обратную косую черту (используйте глобальное пространство имен).
<?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";
}
Результаты:
~ » php test.php
45
7
1
is not array
РЕДАКТИРОВАТЬ: Только сейчас я нашел это руководство с очень похожим примером: http://php.net/manual/en/language.namespaces.global.php
Других решений пока нет …