【发布时间】:2018-06-15 15:38:52
【问题描述】:
我正在使用 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 将回退到全局函数。
那为什么我在这里收到致命错误?
另外,我收到的致命错误是否意味着程序正在运行无限循环?如果是,如何?如果不是,这个致命错误的确切含义是什么?
【问题讨论】:
-
我所看到的只是“命名空间”函数存在......
-
"如果命名空间函数不存在则回退到全局函数" – 好吧,但是
strlen确实 存在于你的命名空间中,并且这是一个无限递归函数。当然,它唯一能做的就是内存不足。 -
同:
function myfunc($num) { return myfunc($num) - 1; }使用return \strlen($str) - 1;让它调用内置的PHP。 -
@deceze 我的意思是,老实说,我本以为它会超出某种垂直方向的内存结构...:3c
-
@Sammitch 啊,像筒仓排气?是的,同样的区别。
标签: php function namespaces global built-in