调用类方法时出现“调用未定义函数”错误

Posted

技术标签:

【中文标题】调用类方法时出现“调用未定义函数”错误【英文标题】:"call to undefined function" error when calling class method 【发布时间】:2011-06-16 03:11:28 【问题描述】:

这是错误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!";
            elseecho"Not Added!";
        ;  
    

【问题讨论】:

示例代码可能容易受到函数delassign 中的SQL injection 的攻击。要修复这个漏洞,请从过时的 mysql 驱动程序切换到 PDO 并使用 prepared statements。请注意,这优于显式清理,因为虽然您可以忘记清理,但使用准备好的语句参数不会忘记安全方面的事情(如果您忘记了参数,php 将生成错误通知您)。 ...如果您需要 PDO 教程,请尝试"Writing MySQL Scripts with PHP and PDO"。 【参考方案1】:

您可以做的另一个愚蠢的错误是将递归函数从非类环境复制到类,并且不要将内部自我调用更改为 $this->method_name()

我写这篇文章是因为我不明白为什么我会收到这个错误,当你搜索这个错误时,这个帖子在谷歌中是第一个。

【讨论】:

"im writing this because couldnt 明白为什么我得到这个错误,而且这个帖子是谷歌的第一个“这真的很聪明。谢谢。【参考方案2】:

队友,

我今天在测试一个简单的脚本时偶然发现了这个错误。我没有使用“类”功能,所以它带着一粒盐。 我在定义和声明之前调用函数...类似这样的

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

       function foo()
                       echo "blah blah blah";
                     

所以 php 向我抛出错误“调用未定义函数”。

这有点像经典的编程错误,但可能会帮助需要线索的人。

【讨论】:

【参考方案3】:

您没有名为assign() 的函数,而是具有此名称的方法。 PHP 不是 Java,在 PHP 中你必须明确,如果你想调用一个函数

assign()

或方法

$object->assign()

在您的情况下,对函数的调用驻留在另一个方法中。 $this 始终指代对象本身,其中存在方法。

$this->assign()

【讨论】:

那么,定义以关键字function开头的PHP类方法实际上不是函数吗?您需要使用 $this-> 来调用它的事实似乎与不必预先定义返回类型(或者即使有明确的返回值)不一致(恕我直言)。 PHP 中的关键字“function”是使用的函数、方法和过程(更新:“和闭包”)。它可能是一个真正的函数,这取决于上下文。我不明白$this-> 和返回类型之间的关系应该在哪里。返回类型是相当新的(至少与这个答案相比;))并且 PHP 仍然是弱类型的。不需要类型声明。【参考方案4】:

你需要像这样调用函数

$this->assign()

而不仅仅是assign()

【讨论】:

以上是关于调用类方法时出现“调用未定义函数”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 wamp 2.2 中调用未定义函数 curl_init() 错误

在 wamp 2.2 中调用未定义函数 curl_init() 错误

“调用未定义函数 odbc_exec()”错误连接到 Linux PHP 服务器上的 Access 数据库

为啥调用未定义函数时没有 PHP 错误?

phpMyAdmin 错误调用未定义函数

致命错误:未捕获错误:调用未定义函数 is_product()