1. ホーム
  2. php

[解決済み] PHP 未定義関数への呼び出し

2022-01-30 01:59:16

質問

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

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. 関数がファイル内に存在することを確認しました。

私はこれを理解することができません。私はここで何かを見逃しているのでしょうか?

解決方法は?

これは開発者のミスで、終了波括弧の位置がずれていたため、上記の関数が ネストされた関数 .

SOの未定義関数エラーに関連する質問を多く見かけます。他の誰かが同じ問題を持っている場合に備えて、これを答えとして書き留めておこう。 関数スコープ .

最初にトラブルシュートしてみたこと

  1. 関数定義のあるphpファイルを検索しました。そのファイルが存在することを確認しました。
  2. を確認しました。 要求する (または 含む という文がページ内に存在します。また require/include は正しいです。
  3. require文のファイル名のスペルが正しいことを確認。
  4. インクルードファイルの単語をエコーし、正しくインクルードされているかどうかを確認。
  5. ファイル末尾に別の関数を定義し、それを呼び出す。これもうまくいった。

レガシーシステムの問題で、関数が非常に長かったため、中括弧をたどるのが困難でした。トラブルシューティングのためのさらなるステップは、このようなものでした。

  1. インクルードファイルの最後に、簡単なprint関数を定義しておきました。私はそれを"undefined function"のすぐ上に移動させました。それでこれも未定義になった。
  2. 何らかのスコープの問題であることを確認。

  3. Netbeansのcollapse(コードの折りたたみ)機能を使って、この関数のすぐ上の関数をチェックしました。つまり、上の1000行の関数がこの関数と一緒に折りたたまれただけで、この関数はネストされた関数になっているのです。

  4. 問題を特定した後、その関数をファイルの最後にカットペーストすると、問題は解決しました。