我对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()。。。指向我的主php文件中的这一行:
$sent->myfunction(param1, param2);
奇怪的是:在我的主php文件中写入时:
$sent->
我使用的php编辑器在上下文窗口myfunction()中显示,这样我就可以拿起它了。。这意味着SentDocument.php链接良好,功能可用,对吧?
那么我为什么会出错呢?我做错了什么?
万分感谢!
函数myfunction
应该在一个类中,以便能够使用实例进行调用。因此:
class SendDocument
{
public function myfunction (&$param1, &$param2, &$sError)
{ // inside goes an sql query using param1 and param2
}
}
顺便说一句,你为什么要通过引用&
来添加这些参数。你需要在函数中更改它们吗。
另外:$sent->myfunction(param1, param2);
将导致语法错误。如果param1
和param2
是字符串,您应该将它们封装在的引号中(双引号或单引号),或者它们是变量,它们前面应该有一个美元符号($
)。我猜它们应该是可变的,因为您试图通过引用函数来传递它们(函数声明中的和号&
)。
另一件事是,在该函数中有三个必需的参数,但您试图只使用两个参数来调用该函数。因此,您应该在调用函数时提供第三个参数,或者您应该选择第三个选项(通过给它一个默认值)。
在您的情况下,我会将结构更改为以下内容(半伪代码):
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');
此错误消息意味着$sent
不是对象。您的代码乍一看似乎是正确的,所以错误一定在您尚未发布的其他地方。我想你定义了类SendDocument
?
什么与var_dump($sent)
相呼应?
另外两个注意事项:
-
您应该在函数参数中省略
&
。&
的意思是"通过引用传递",所以只有当你想修改变量时才使用它,这里不需要。 -
方法定义等待3个参数,但只传递2个参数。因此,如果第三个是可选的,您应该给它一个默认值,否则会抛出一条错误消息:
public function myfunction ($param1, $param2, $sError = null)