web-dev-qa-db-fra.com

Erreur "appel à une fonction non définie" lors de l'appel de la méthode de classe

c'est l'erreur Fatal error: Call to undefined function assign(
c'est le code, comme vous pouvez le constater, j’ai évidemment défini la fonction, alors pourquoi ne fonctionne-t-il pas?

class shades {
    function create($name, $shades, $slug, $shortDesc, $longDesc, $position){
        $name = sanitize_paranoid_string($name);
        $slug = slug($name);
        $shortDesc = sanitize_sql_string($shortDesc);
        $longDesc = sanitize_sql_string($longDesc);
        $query = mysql_query("INSERT INTO products (type, name, slug, shortDesc, htmlDesc, position)VALUES('shades','$name','$slug','$shortDesc','$longDesc','$position')")or die(mysql_error());  
        $ID = mysql_insert_id();
        assign($shades, $ID);
        if($query) {return true;}
        else {return false;};
    }
    function delassign($toID){
        mysql_query("DELETE FROM assign WHERE type='shades' AND toID='$toID'")or die(mysql_error());    
    }
    function assign($shades, $toID)
    {
        foreach($shades as $shade)
        {
            $result = mysql_query("INSERT INTO assign(type, typeID, toID)VALUES('shades','$shade','$toID')")or die(mysql_error());
            if($result){echo "Added!";}
            else{echo"Not Added!";}
        };  
    }
}
42
Tommy Arnold

Vous n'avez pas une fonction nommée assign(), mais une méthode portant ce nom. PHP n'est pas Java et dans PHP vous devez indiquer clairement si vous voulez appeler une fonction

assign()

ou une méthode

$object->assign()

Dans votre cas, l'appel à la fonction réside dans une autre méthode. $this fait toujours référence à l'objet dans lequel une méthode existe elle-même.

$this->assign()
89
KingCrunch

vous devez appeler la fonction comme ça

$this->assign()

au lieu de assign()

14
Nanne

Camarades,

Je suis tombé sur cette erreur aujourd'hui en testant un script simple. Je n'utilise pas la fonction "classe", donc il faut le prendre avec un grain de sel . J'appelais fonction avant sa définition et sa déclaration

      try{
             foo();
         }
       catch (exception $e)
           {
            echo "$e->getMessage()";
           }

       function foo(){
                       echo "blah blah blah";
                     }

donc php me lançait erreur "appel à la fonction indéfinie". 

Cela ressemble un peu à une erreur de programmation classique, mais peut aider quelqu'un qui a besoin d'un indice. 

3
Vishal

Une autre erreur stupide que vous pouvez faire est de copier une fonction récursive d’environnement de classe en classe et de ne pas modifier les appels internes internes à $ this-> nom_méthode ()

j'écris ceci parce que je ne pouvais pas comprendre pourquoi j'ai eu cette erreur et ce fil est d'abord dans google lorsque vous recherchez cette erreur.

0
Edgars Aivars