J'essaie d'appeler une fonction d'une autre fonction. Je reçois une erreur:
Fatal error: Call to undefined function getInitialInformation()
in controller.php on line 24
fichier controller.php:
require_once("model/model.php");
function intake() {
$info = getInitialInformation($id); //line 24
}
model/model.php
function getInitialInformation($id) {
return $GLOBALS['em']->find('InitialInformation', $id);
}
Choses déjà essayées:
Je ne suis pas capable de comprendre cela. Est-ce que j'ai râté quelque chose?
C’était une erreur du développeur - une accolade de fin mal placée, qui a rendu la fonction ci-dessus un fonction imbriquée.
Je vois beaucoup de questions liées à l'erreur de fonction non définie dans SO. Permettez-moi de noter ceci comme une réponse, au cas où quelqu'un d'autre aurait le même problème avec portée de la fonction.
Ce que j'ai essayé de résoudre en premier:
Il était difficile de retrouver les accolades, car les fonctions étaient très longues - problème avec les systèmes hérités. Les étapes suivantes pour résoudre les problèmes sont les suivantes:
Identifié cela comme une question de portée.
Utilisez la fonctionnalité Netbeans collapse (code fold) pour vérifier la fonction juste au-dessus de celle-ci. Ainsi, la fonction 1000 lignes ci-dessus vient de s’effondrer avec celle-ci, ce qui en fait une fonction imbriquée.
Une fois le problème identifié, coupez la fonction à la fin du fichier, ce qui a résolu le problème.
Placez ce code dans un fichier appelé p.php
:
<?php
class yoyo{
function salt(){
}
function pepper(){
salt();
}
}
$y = new yoyo();
$y->pepper();
?>
Exécutez-le comme ceci:
php p.php
Nous avons des erreurs:
PHP Fatal error: Call to undefined function salt() in
/home/el/foo/p.php on line 6
Solution: utilisez $this->salt();
au lieu de salt();
Alors faites-le comme ceci à la place:
<?php
class yoyo{
function salt(){
}
function pepper(){
$this->salt();
}
}
$y = new yoyo();
$y->pepper();
?>
Si quelqu'un pouvait poster un lien vers pourquoi $, ceci doit être utilisé avant PHP fonctionne dans les classes, ouais, ce serait génial.
Souvent, le problème vient du fait que php
ne prend pas en charge les balises ouvertes courtes dans php.ini
fichier, c'est-à-dire:
<?
phpinfo();
?>
Tu dois utiliser:
<?php
phpinfo();
?>
Votre fonction est probablement dans un espace de noms différent de celui d'où vous l'appelez.
Je suis arrivé ce problème sur un serveur virtuel, quand tout fonctionnait correctement sur un autre hébergement. Après plusieurs modifications, j'ai réalisé que je include
ou require_one
fonctionne sur tous les appels sauf dans un fichier. Le problème de ce fichier était le code < ?php ? >
Au début et à la fin du texte. C'était un script qui n'était que < ?
, et dans cette version d'Apache en cours d'exécution ne fonctionnait pas