【问题标题】:"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!";}
            else{echo"Not Added!";}
        };  
    }
}

【问题讨论】:

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

标签: php oop class methods


【解决方案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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      相关资源
      最近更新 更多