在使用PHP嵌套函数和类时要注意几个问题:
1、函数和类的作用域是全局的。不管它们是在哪里定义的,他们都是全局可见的。
function parent(){
function son(){
echo 'son()';
}
}
son(); // son();
2、函数里的变量作用域只是在本函数里面。别指望它可以在inner function里使用
function parent(){
$var = 'I am parent()';
function son(){
var_dump($var);
}
}
son(); //NULL
3、在使用嵌套函数(inner function)和条件函数(if function),一定要注意先定义后使用。原因是,PHP只会预处理全局的函数,不会预处理这两种方式的函数。其实有使用过C的人可以很容易的理解。C语言是要求先定义后使用的。而PHP在使用C语言的机制时,只是为全局的函数做了一次方便用户使用的预处理。其他的就按C语言自己的规则来了。所以:
function parent(){
son();
function son(){
echo 'son()';
}
}
son(); // Fatal error: Call to undefined function son() ...
/
son(); //Fatal error: Call to undefined function son() ...
if(1){
function son(){
}
}
4、在函数或是类里使用include的时候一定要小心第二点所讲的变量作用域问题。
function incfun(){
$var = 'incfun()';
include('inc.php')
}
//inc.php
function son(){
global $var
var_dump($var) ;
}
incfun(); //NULL