PHP 调用未定义的函数

2022-08-30 12:32:10

我正在尝试从另一个函数调用一个函数。我收到一个错误:

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

控制器.php文件:

require_once("model/model.php"); 

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

型号/型号.php

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

已经尝试过的事情:

  1. 已验证require_once是否正常工作,以及文件是否存在于指定位置。
  2. 已验证文件中是否存在该函数。

我无法弄清楚这一点。我在这里错过了什么吗?


答案 1

如何重现错误,以及如何修复它:

  1. 将此代码放在一个名为 :p.php

    <?php
    class yoyo{
        function salt(){
        }
        function pepper(){
            salt();
        }
    }
    $y = new yoyo();
    $y->pepper();
    ?>
    
  2. 像这样运行它:

    php p.php
    
  3. 我们得到错误:

    PHP Fatal error:  Call to undefined function salt() in 
    /home/el/foo/p.php on line 6
    
  4. 解决方案:使用而不是$this->salt();salt();

    所以这样做是这样的:

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

如果有人可以发布一个链接,说明为什么在PHP在类中运行之前必须使用$this,是的,那就太好了。


答案 2

这是一个开发人员的错误 - 一个放错位置的结尾大括号,这使得上述函数成为嵌套函数

我看到很多与SO中未定义函数错误相关的问题。让我记下这个作为答案,以防其他人对函数范围有同样的问题。

我首先尝试排除故障的事项:

  1. 已搜索包含函数定义的 php 文件。已验证文件是否存在。
  2. 已验证页面中存在上述文件的“要求”(或包含)语句。此外,已验证要求/包含中的绝对路径是否正确。
  3. 已验证 require 语句中的文件名拼写是否正确。
  4. 在包含的文件中回显了一个单词,以查看它是否已正确包含。
  5. 在文件末尾定义了一个单独的函数,并调用它。它也奏效了。

很难追踪大括号,因为功能很长 - 遗留系统的问题。进一步的故障排除步骤是:

  1. 我已经在包含的文件的末尾定义了一个简单的打印函数。我把它移到了“未定义函数”的正上方。这也使它没有定义。
  2. 已将此标识为某些范围问题。

  3. 使用 Netbeans 折叠(代码折叠)功能来检查此函数正上方的函数。因此,上面的 1000 行函数与这个函数一起折叠,使其成为嵌套函数。

  4. 一旦发现问题,将函数剪切粘贴到文件末尾,从而解决了问题。


推荐