调用类方法时出现“调用未定义函数”错误
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 couldn
t 明白为什么我得到这个错误,而且这个帖子是谷歌的第一个“这真的很聪明。谢谢。【参考方案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() 错误