我是PHP的新手,所以我不知道如何解决这个错误。我一直在这里阅读相关的帖子,但正如我所说,我很少有经验知道应用类似的解决方案:(
这是事情: 在我的主要php文件中,我有:
require_once("SentDocument.php");
$sent = new SentDocument();
$sent->myfunction(param1, param2);
在SentDocument.php中
class SentDocument {
public function myfunction (&$param1, &$param2, &$sError)
{ // inside goes an sql query using param1 and param2
}
}
有了这个,我得到: 调用未定义的函数myfunction()in ...指向我的主php文件中的这一行:
$sent->myfunction(param1, param2);
奇怪的是:在我的主要php文件中写作时:
$sent->
我正在使用php编辑器在上下文窗口中显示myfunction()所以我可以把它拿起来......这意味着SentDocument.php链接得很好,而且功能可用,对吗?
那么为什么我会收到错误?我究竟做错了什么?
万分感谢!
答案 0 :(得分:1)
函数myfunction
应该在类中,以便能够使用实例进行调用。所以:
class SendDocument
{
public function myfunction (&$param1, &$param2, &$sError)
{ // inside goes an sql query using param1 and param2
}
}
BTW为什么要通过引用&
添加这些参数。你需要在功能中更改它们吗?
另外:$sent->myfunction(param1, param2);
会导致语法错误。如果param1
和param2
是字符串,则应将它们封装在引号(双精度或单数)中,或者它们是变量,它们应该在其前面有一个美元符号($
)。我的猜测是它们应该是变量的,因为yu试图通过引用函数传递它们(函数声明中的&符号&
)。
另外一件事你在该函数中有三个必需参数,但是你试图用两个参数调用该函数。因此,您在调用函数时要么提供第三个参数,要么应该设置第三个参数(通过给它一个默认值)。
在你的情况下,我会将结构更改为类似下面的内容(半伪代码):
class SendDocument
{
protected $errors = array();
public function myfunction ($param1, $param2)
{
// run query
// if something went wrong
if (!$recordset) {
$this->addError($theError, $query);
}
return $recordset;
}
protected function addError($error, $query) {
$this->errors[] = array($error, $query);
}
public function getLastError() {
if (empty($this->errors)) return null;
return $this->errors[0];
}
}
require_once("SentDocument.php");
$sent = new SentDocument();
$recordset = $sent->myfunction('param1', 'param2');
答案 1 :(得分:0)
此错误消息表示$sent
不是对象。您的代码乍一看似乎正确,因此错误必须是您尚未发布的其他地方。我假设你定义了班级SendDocument
?
什么回应var_dump($sent)
?
另外两个注释:
您应该在函数参数中省略&
。 &
表示“按引用传递”,因此只有在您想要修改变量时才使用它。
你的方法定义等待3个参数,但你只传递2.所以如果第三个是可选的,你应该给它一个默认值,否则会抛出一条错误信息:
public function myfunction ($param1, $param2, $sError = null)