PHP-oproep naar niet-gedefinieerde functie

Ik probeer een functie aan te roepen vanuit een andere functie. Ik krijg een foutmelding:

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

controller.php-bestand:

require_once("model/model.php"); 
function intake() {
    $info = getInitialInformation($id); //line 24
}

model/model.php

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

Dingen al geprobeerd:

  1. Geverifieerd dat de required_once werkt en dat het bestand bestaat op de opgegeven locatie.
  2. Geverifieerd dat de functie in het bestand bestaat.

Ik kan dit niet achterhalen. Mis ik hier iets?


Antwoord 1, autoriteit 100%

Hoe de fout te reproduceren en op te lossen:

  1. Zet deze code in een bestand met de naam p.php:

    <?php
    class yoyo{
        function salt(){
        }
        function pepper(){
            salt();
        }
    }
    $y = new yoyo();
    $y->pepper();
    ?>
    
  2. Voer het als volgt uit:

    php p.php
    
  3. We krijgen foutmelding:

    PHP Fatal error:  Call to undefined function salt() in 
    /home/el/foo/p.php on line 6
    
  4. Oplossing: gebruik $this->salt(); in plaats van salt();

    Dus doe het in plaats daarvan als volgt:

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

Als iemand een link zou kunnen plaatsen naar waarom $this moet worden gebruikt voordat PHP binnen klassen functioneert, ja, dat zou geweldig zijn.


Antwoord 2, autoriteit 31%

Dit was een fout van de ontwikkelaar – een verkeerd geplaatste eindaccolade, waardoor de bovenstaande functie een geneste functie werd.

Ik zie veel vragen met betrekking tot de ongedefinieerde functiefout in SO. Laat me dit als antwoord noteren, voor het geval iemand anders hetzelfde probleem heeft met functiebereik.

Dingen die ik eerst probeerde op te lossen:

  1. Gezocht naar het php-bestand met de functiedefinitie erin. Geverifieerd dat het bestand bestaat.
  2. Gecontroleerd dat de require (of include) verklaring voor het bovenstaande bestand op de pagina bestaat. Controleer ook of het absolute pad in de require/include correct is.
  3. Gecontroleerd of de bestandsnaam correct is gespeld in de eis-instructie.
  4. Heeft een woord herhaald in het bijgevoegde bestand om te zien of het correct is opgenomen.
  5. Heeft een aparte functie aan het einde van het bestand gedefinieerd en deze aangeroepen. Het werkte ook.

Het was moeilijk om de accolades te traceren, omdat de functies erg lang waren – een probleem met legacy-systemen. Verdere stappen om problemen op te lossen waren deze:

  1. Ik heb al een eenvoudige afdrukfunctie gedefinieerd aan het einde van het bijgevoegde bestand. Ik heb het verplaatst naar net boven de “undefined function”. Dat maakte het ook ongedefinieerd.
  2. Dit is geïdentificeerd als een probleem met het bereik.

  3. Gebruikte de functie Netbeans ineenstorting (code vouwen) om de functie net boven deze te controleren. Dus de functie van 1000 regels hierboven is net samengevouwen met deze, waardoor dit een geneste functie is.

  4. Zodra het probleem is geïdentificeerd, knipt u de functie naar het einde van het bestand, waardoor het probleem is opgelost.


Antwoord 3, autoriteit 9%

Vaak komt het probleem omdat php geen korte open tags in het bestand php.ini ondersteunt, d.w.z.:

<?
   phpinfo();
?>

U moet gebruiken:

<?php
   phpinfo();
?>

Antwoord 4, autoriteit 6%

Uw functie bevindt zich waarschijnlijk in een andere naamruimte dan die van waaruit u hem aanroept.

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


Antwoord 5

Ik heb dat probleem op een virtuele server gehad, terwijl alles correct werkte op andere hosting.
Na verschillende aanpassingen realiseerde ik me dat ik include of require_one werkt op alle oproepen behalve in een bestand.
Het probleem van dit bestand was de code < ?php ? > Aan het begin en einde van de tekst.
Het was een script dat alleen < ?, en in die versie van apache die draaide werkte niet


Antwoord 6

Momenteel werk ik aan webservices waar mijn functie is gedefinieerd en het gaf een fout ongedefinieerde functie. Ik heb dit zojuist toegevoegd in autoload.php in codeigniter

$autoload[‘helper’] = array(‘common’,’security’,’url’);

vaak is de naam van mijn controller.


Antwoord 7

Controleer of u <?PHP bovenaan uw code heeft staan. Als u het vergeet, verschijnt deze fout.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

10 + 11 =

Other episodes