web-dev-qa-db-ja.com

クラスメソッドを呼び出すときの「未定義関数の呼び出し」エラー

これはエラーですFatal error: Call to undefined function assign(
これはコードです。明らかに関数を定義しているので、なぜ機能しないのですか

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!";}
        };  
    }
}
43
Tommy Arnold

assign()という名前の関数はありませんが、この名前のメソッドはありません。 PHP is not Java and in PHP関数を呼び出す場合は、明確にする必要があります

assign()

またはメソッド

$object->assign()

あなたの場合、関数の呼び出しは別のメソッド内にあります。 $thisは常に、メソッドが存在するオブジェクト自体を指します。

$this->assign()
93
KingCrunch

このような関数を呼び出す必要があります

_$this->assign()
_

ただassign()の代わりに

15
Nanne

仲間、

今日、簡単なスクリプトをテストしているときにこのエラーに出くわしました。私は「クラス」関数を使用していないので、それは塩の粒でそれを取る。定義と宣言の前に関数を呼び出していました...このようなもの

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

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

だからphpは「未定義の関数を呼び出す」エラーを投げていました。

この種のプログラミングエラーは古典的なエラーのように見えますが、手がかりを必要とする人を助けるかもしれません。

4
Vishal

あなたができるもう一つの愚かな間違いは、再帰関数を非クラス環境からクラスにコピーし、内部の自己呼び出しを$ this-> method_name()に変更しないことです

このエラーが発生した理由を理解できず、このエラーを検索したときにこのスレッドがGoogleで最初に表示されるため、これを書いています。

0
Edgars Aivars