35

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

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. 验证该函数是否存在于文件中。

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

4

7 回答 7

82

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

  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 的链接,是的,那会很棒。

于 2014-03-28T20:59:00.623 回答
26

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

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

我首先尝试解决的问题:

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

很难跟踪大括号,因为函数很长 - 遗留系统的问题。进一步的故障排除步骤如下:

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

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

  4. 确定问题后,将函数剪切粘贴到文件末尾,从而解决了问题。

于 2013-01-02T02:04:14.787 回答
7

很多时候出现问题是因为php不支持php.ini文件中的短打开标签,即:

<?
   phpinfo();
?>

您必须使用:

<?php
   phpinfo();
?>
于 2013-09-26T21:08:11.123 回答
5

您的函数可能与您调用它的名称空间不同。

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

于 2013-01-02T01:54:12.373 回答
1

当其他主机上的一切正常时,我在虚拟服务器上发生了这个问题。经过几次修改后,我意识到我includerequire_one可以处理除文件之外的所有调用。这个文件的问题是代码< ?php ? >在文本的开头和结尾。它只是一个脚本< ?,并且在那个运行的 apache 版本中不起作用。

于 2016-08-30T09:32:13.970 回答
0

目前我正在处理定义了我的函数的 Web 服务,它抛出了一个错误未定义的函数。我只是在 codeigniter 的 autoload.php 中添加了这个

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

common 是我的控制器的名称。

于 2017-06-09T10:00:04.827 回答
0

请检查<?PHP您的代码顶部是否有。如果忘记了,就会出现这个错误。

于 2020-09-29T03:32:22.900 回答