PHP调用未定义的函数

jan*_*z00 25 php function

我试图从另一个函数调用一个函数.我收到一个错误:

Fatal error: Call to undefined function getInitialInformation() 
in controller.php on line 24
Run Code Online (Sandbox Code Playgroud)

controller.php文件:

require_once("model/model.php"); 

function intake() {
    $info = getInitialInformation($id); //line 24
}
Run Code Online (Sandbox Code Playgroud)

模型/ model.php

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

已尝试的事情:

  1. 验证require_once是否有效,并且该文件存在于指定位置.
  2. 验证该函数是否存在于文件中.

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

Eri*_*ski 66

如何重现错误,以及如何解决它:

  1. 将此代码放在一个名为的文件中p.php:

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

    php p.php
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我们得到错误:

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

    所以这样做:

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

如果有人可以发布一个链接,说明为什么$必须在类中的PHP函数之前使用它,是的,这将是很好的.

  • $this-&gt; 指的是属于该类并在类内声明的函数,同样的情况也适用于在类内声明的变量。在类内部称为 $this-&gt;function(),如果在类外部为 public,则称为 $theclass-&gt;function() (2认同)

jan*_*z00 22

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

我在SO中看到了许多与未定义函数错误相关的问题.让我记下这个答案,以防其他人对功能范围有同样的问题.

我尝试先解决的问题:

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

很难跟踪括号,因为功能很长 - 遗留系统存在问题.进一步的故障排除步骤如下:

  1. 我已经在包含文件的末尾定义了一个简单的打印功能.我把它移到了"未定义的函数"之上.这也使它不确定.
  2. 将此标识为某个范围问题.

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

  4. 一旦发现问题,将功能剪切粘贴到文件末尾,解决了问题.


小智 7

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

<?
   phpinfo();
?>
Run Code Online (Sandbox Code Playgroud)

你必须使用:

<?php
   phpinfo();
?>
Run Code Online (Sandbox Code Playgroud)


Jon*_*end 5

您的函数可能位于与您从中调用它的命名空间不同的命名空间中。

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