学习命名空间的时候,遇到了坑,就是其中有些方法定义了却找不到
没有命名空间的时候
<?php
class 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)
有命名空间的时候
<?php
namespace 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) 呢?
没有命名空间时,函数是注册到全局函数表中,有命名空间后,命名空间下的函数带有命名空间注册到全局函数表中
function_exists("funname");是去全局函数表中查找函数是否存在
有命名空间的情况下,在函数名称前加上命名空间即可