我在php中有这个脚本:
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['data_id']) && $_POST['data_id'] != NULL){
$data = $_POST['data_id'];
DoConfig($data);
function DoConfig($param_data){
echo $param_data;
}
}
}else{
echo '0';
}
我不明白为什么我收到错误Call to an undefined function
,我该如何解决?
答案 0 :(得分:8)
PHP按顺序执行 - 声明之前的函数使用它,你就可以了。
详细说明 - 在PHP中加载整个文件,并根据范围进行解析。如果函数位于全局范围的末尾,则这将起作用,因为此时在输入条件的子范围之前评估了全局范围。由于您使用if
输入子范围,因此应用相同的评估顺序 - 在用于当前范围之前,需要对该函数进行评估。
答案 1 :(得分:4)
您的代码失败,因为函数在if()
循环内声明并在调用之后。您可以将其移到if()
之外,但仍将其保留在脚本的底部,但最佳做法则另有规定。
在使用它们之前声明你的函数,并且在任何条件或循环之外;最好是在一个单独的文件中,或者至少在脚本的最顶层。例如:
function DoConfig($param_data) {
echo $param_data;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['data_id']) && $_POST['data_id'] != NULL) {
$data = $_POST['data_id'];
DoConfig($data);
}
} else {
echo '0';
}
答案 2 :(得分:0)
请将DoConfig
功能放在if-else condition
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['data_id']) && $_POST['data_id'] != NULL){
$data = $_POST['data_id'];
DoConfig($data);
}
}else{
echo '0';
}
function DoConfig($param_data){
echo $param_data;
}
答案 3 :(得分:0)
您需要在调用之前声明您的函数。做:
function DoConfig($param_data){
echo $param_data;
}
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['data_id']) && $_POST['data_id'] != NULL){
$data = $_POST['data_id'];
DoConfig($data);
}
}else{
echo '0';
}
答案 4 :(得分:0)
好吧,告诉我更多..在我的真实项目中,在函数DoConfig中我插入了PDO中的DataBase,所以如果我将这些函数放在''if''之外,那么安全性会出现问题吗? / p>
答案 5 :(得分:0)
* 在if语句中创建函数不是最佳实践 * 因为如果条件为真将调用它,否则将给出未定义的错误以防你以后再调用该函数。您甚至在创建函数之前调用了函数,这就是为什么给出未定义的错误。
最好在if语句之外创建函数并在任何地方运行它。
//Creating function first and then calling it afterwards
function DoConfig($param_data)
{
echo $param_data;
}
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(isset($_POST['data_id']) && $_POST['data_id'] != NULL){
$data = $_POST['data_id'];
//Function call
DoConfig($data);
}
}else
{
echo '0';
}
根据您的回答编辑:如果您在if语句之外创建安全性,则绝对没有问题,在需要时使用函数。
如果您在if语句中创建函数,则可以替代以后使用 稍后使用function_exist方法,这样就不会出现未定义的错误 http://in1.php.net/function_exists