duanjizhan9353
2013-01-02 01:20
浏览 339
已采纳

PHP调用未定义的函数

I am trying to call a function from another function. I get an error:

Fatal error: Call to undefined function getInitialInformation() 
in controller.php on line 24

controller.php file:

require_once("model/model.php"); 

function intake() {
    $info = getInitialInformation($id); //line 24
}

model/model.php

function getInitialInformation($id) {
    return $GLOBALS['em']->find('InitialInformation', $id);
}

Things already tried:

  1. Verified that the require_once works, and the file exists in the specified location.
  2. Verified that the function exists in the file.

I am not able to figure this out. Am I missing something here?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • duanliang9288 2013-01-02 02:04
    已采纳

    This was a developer mistake - a misplaced ending brace, which made the above function a nested function.

    I see a lot of questions related to the undefined function error in SO. Let me note down this as an answer, in case someone else have the same issue with function scope.

    Things I tried to troubleshoot first:

    1. Searched for the php file with the function definition in it. Verified that the file exists.
    2. Verified that the require (or include) statement for the above file exists in the page. Also, verified the absolute path in the require/include is correct.
    3. Verified that the filename is spelled correctly in the require statement.
    4. Echoed a word in the included file, to see if it has been properly included.
    5. Defined a separate function at the end of file, and called it. It worked too.

    It was difficult to trace the braces, since the functions were very long - problem with legacy systems. Further steps to troubleshoot were this:

    1. I already defined a simple print function at the end of included file. I moved it to just above the "undefined function". That made it undefined too.
    2. Identified this as some scope issue.

    3. Used the Netbeans collapse (code fold) feature to check the function just above this one. So, the 1000 lines function above just collapsed along with this one, making this a nested function.

    4. Once the problem identified, cut-pasted the function to the end of file, which solved the issue.

    打赏 评论
  • dqyknf4423 2013-01-02 01:54

    Your function is probably in a different namespace than the one you're calling it from.

    http://php.net/manual/en/language.namespaces.basics.php

    打赏 评论
  • donglongqiao9595 2013-09-26 21:08

    Many times the problem comes because php does not support short open tags in php.ini file, i.e:

    <?
       phpinfo();
    ?>
    

    You must use:

    <?php
       phpinfo();
    ?>
    
    打赏 评论
  • dongluan5740 2014-03-28 20:59

    How to reproduce the error, and how to fix it:

    1. Put this code in a file called p.php:

      <?php
      class yoyo{
          function salt(){
          }
          function pepper(){
              salt();
          }
      }
      $y = new yoyo();
      $y->pepper();
      ?>
      
    2. Run it like this:

      php p.php
      
    3. We get error:

      PHP Fatal error:  Call to undefined function salt() in 
      /home/el/foo/p.php on line 6
      
    4. Solution: use $this->salt(); instead of salt();

      So do it like this instead:

      <?php
      class yoyo{
          function salt(){
          }
          function pepper(){
              $this->salt();
          }
      }
      $y = new yoyo();
      $y->pepper();
      
      ?>
      

    If someone could post a link to why $this has to be used before PHP functions within classes, yeah, that would be great.

    打赏 评论
  • douqujin2767 2016-08-30 09:32

    I happened that problem on a virtual server, when everything worked correctly on other hosting. After several modifications I realized that I include or require_one works on all calls except in a file. The problem of this file was the code < ?php ? > At the beginning and end of the text. It was a script that was only < ?, and in that version of apache that was running did not work

    打赏 评论
  • dongshan4549 2017-06-09 10:00

    Presently I am working on web services where my function is defined and it was throwing an error undefined function.I just added this in autoload.php in codeigniter

    $autoload['helper'] = array('common','security','url');

    common is the name of my controller.

    打赏 评论

相关推荐 更多相似问题