调用一个未定义的函数,为什么?

时间:2014-01-13 17:52:04

标签: php

我在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,我该如何解决?

6 个答案:

答案 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