35

別の関数から関数を呼び出そうとしています。エラーが発生します:

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

controller.php ファイル:

require_once("model/model.php"); 

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

モデル/model.php

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

すでに試したこと:

  1. require_once が機能し、指定した場所にファイルが存在することを確認しました。
  2. 関数がファイルに存在することを確認しました。

私はこれを理解することができません。ここで何か不足していますか?

4

7 に答える 7

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

他のホスティングですべてが正しく機能していたときに、仮想サーバーでその問題が発生しました。いくつかの変更を加えた後、ファイルを除くすべての呼び出しで動作するincludeことに気付きました。require_oneこのファイルの問題は< ?php ? >、テキストの最初と最後にあるコードでした。のみのスクリプトで< ?あり、実行中のそのバージョンの apache では動作しませんでした。

于 2016-08-30T09:32:13.970 に答える