PHP Вызов функции undefined
Я пытаюсь вызвать функцию из другой функции. Я получаю сообщение об ошибке:
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);
}
Вещи, которые уже пробовали:
- Проверено, что require_once работает, и файл существует в указанном месте.
- Проверено, что функция существует в файле.
Я не могу понять это. Я что-то пропустил?
Ответы
Ответ 1
Это была ошибка разработчика - неуместная конечная скобка, которая сделала указанную выше функцию вложенной функцией.
Я вижу много вопросов, связанных с ошибкой функции undefined в SO. Позвольте мне отметить это как ответ, если у кого-то другая проблема с функцией scope.
Сначала я попытался устранить неполадки:
- Искал файл php с определением функции в нем. Убедитесь, что файл существует.
- Проверено, что запрос (или include) для вышеуказанного файла существует на странице. Также проверяется абсолютный путь в требовании/включении. Правильно.
- Проверено, что имя файла написано правильно в инструкции require.
- Повторялось слово во включенном файле, чтобы увидеть, правильно ли оно включено.
- Определена отдельная функция в конце файла и вызвана. Он тоже работал.
Трудно было отслеживать фигурные скобки, поскольку функции были очень длинными - проблема с устаревшими системами. Дальнейшие действия по устранению неполадок были следующими:
- Я уже определил простую функцию печати в конце включенного файла. Я переместил его чуть выше функции undefined. Это тоже сделало его undefined.
-
Определили это как проблему с некоторыми проблемами.
-
Используется функция краха Netbeans (сбрасывание кода) для проверки функции чуть выше этой. Таким образом, функция 1000 строк выше просто свернута вместе с этой, делая эту вложенную функцию.
-
Как только проблема выявлена, вырезаем функцию в конец файла, что решило проблему.
Ответ 2
Как воспроизвести ошибку и как ее исправить:
-
Поместите этот код в файл с именем p.php
:
<?php
class yoyo{
function salt(){
}
function pepper(){
salt();
}
}
$y = new yoyo();
$y->pepper();
?>
-
Запустите его следующим образом:
php p.php
-
Мы получаем ошибку:
PHP Fatal error: Call to undefined function salt() in
/home/el/foo/p.php on line 6
-
Решение: используйте $this->salt();
вместо salt();
Так сделайте так:
<?php
class yoyo{
function salt(){
}
function pepper(){
$this->salt();
}
}
$y = new yoyo();
$y->pepper();
?>
Если кто-то может опубликовать ссылку на почему $, это должно быть использовано до того, как PHP будет функционировать внутри классов, да, это было бы здорово.
Ответ 3
Много раз проблема возникает, потому что php
не поддерживает короткие открытые теги в файле php.ini
, i.e:
<?
phpinfo();
?>
Вы должны использовать:
<?php
phpinfo();
?>
Ответ 4
Ваша функция, вероятно, находится в другом пространстве имен, чем тот, из которого вы его вызываете.
http://php.net/manual/en/language.namespaces.basics.php
Ответ 5
Неуместная конечная скобка, которая сделала вышеприведенную функцию вложенной функцией.
Ответ 6
Я столкнулся с этой проблемой на виртуальном сервере, когда все правильно работало на другом хостинге.
После нескольких модификаций я понял, что я include
или require_one
работает во всех вызовах, кроме как в файле.
Проблема этого файла заключалась в коде < ?php ? >
В начале и в конце текста.
Это был script, который был только < ?
, и в той версии запущенного apache не работало
Ответ 7
В настоящее время я работаю над веб-службами, где моя функция определена, и она выбрасывает ошибку undefined function.I только что добавила это в autoload.php в codeigniter
$autoload ['helper'] = массив ('common', 'security', 'url');
common - это имя моего контроллера.