学习命名空间的时候,遇到了坑,就是其中有些方法定义了却找不到没有命名空间的时候<?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)
茅侃侃
TA贡献1842条经验 获得超21个赞
这么有缘,我也叫小白
第一次为什么全是true,原因是在同一个空间下,当然可以相互读取到函数或者方法
但是第二次为什么不行呢 首先你给A类命名空间是Core,那么function asd()当然也属于这个命名空间了,但是你还是用以前的方法去读取他,怎么可能读取到呢 ,正确的判断方法是var_dump(function_exists('\Core\asd'));
下面那个同理
- 3 回答
- 0 关注
- 1230 浏览
添加回答
举报
0/150
提交
取消