为了账号安全,请及时绑定邮箱和手机立即绑定

[php]请问当存在命名空间的时候, function_exists 是如何工作的?

[php]请问当存在命名空间的时候, function_exists 是如何工作的?

慕无忌1623718 2018-07-03 10:26:03
学习命名空间的时候,遇到了坑,就是其中有些方法定义了却找不到没有命名空间的时候<?phpclass A {    function index () {        function asd (){}         var_dump(function_exists('asd'));     } }class Test extends A {    function doLogin () {        function bbb () {}         var_dump(function_exists('bbb'));     } } $test = new Test(); $test->index();   // bool(true)$test->doLogin(); // bool(true)有命名空间的时候<?phpnamespace Core;class A {    function index () {        function asd (){}         var_dump(function_exists('asd'));     } }namespace App;use Core\A;class Test extends A {    function doLogin () {        function bbb () {}         var_dump(function_exists('bbb'));     } } $test = new Test(); $test->index();    // bool(false)$test->doLogin();  // bool(false)请问为什么呢,怎么在有命名空间的时候得到 bool(true) 呢?
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

没有命名空间时,函数是注册到全局函数表中,有命名空间后,命名空间下的函数带有命名空间注册到全局函数表中
function_exists("funname");是去全局函数表中查找函数是否存在
有命名空间的情况下,在函数名称前加上命名空间即可

var_dump(function_exists('\Core\asd'));//bool(true)
var_dump(function_exists('\App\bbb'));//bool(true)


查看完整回答
反对 回复 2018-07-03
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

var_dump(function_exists('Core\asd'));


查看完整回答
反对 回复 2018-07-03
?
茅侃侃

TA贡献1842条经验 获得超21个赞

这么有缘,我也叫小白 
第一次为什么全是true,原因是在同一个空间下,当然可以相互读取到函数或者方法

但是第二次为什么不行呢 首先你给A类命名空间是Core,那么function asd()当然也属于这个命名空间了,但是你还是用以前的方法去读取他,怎么可能读取到呢 ,正确的判断方法是
var_dump(function_exists('\Core\asd'));
下面那个同理


查看完整回答
反对 回复 2018-07-03
  • 3 回答
  • 0 关注
  • 1230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信