簡體   English   中英

調用類方法時“調用未定義的函數”錯誤

[英]“call to undefined function” error when calling class method

這是錯誤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!";}
        };  
    }
}

你沒有名為assign()的函數,而是一個具有此名稱的方法。 如果你想調用一個函數,那么PHP就不是Java而是在PHP中你必須弄清楚

assign()

或方法

$object->assign()

在您的情況下,對函數的調用駐留在另一個方法中。 $this總是指對象,其中存在方法本身。

$this->assign()

你需要像這樣調用這個函數

$this->assign()

而不僅僅是assign()

配合,

我在測試一個簡單的腳本時偶然發現了這個錯誤。 我沒有使用“類”功能,所以它采取了一粒鹽。 我在定義和聲明之前調用函數......就像這樣

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

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

所以PHP給我錯誤“調用未定義的函數”。

這有點似乎是經典的編程錯誤,但可能會幫助需要線索的人。

您可以做的另一個愚蠢的錯誤是將遞歸函數從非類環境復制到類,並且不要將內部自我調用更改為$ this-> method_name()

我寫這個是因為無法理解為什么我收到這個錯誤,當你搜索這個錯誤時,這個帖子在google中是第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM