PHP函数:在非对象上调用成员函数function()


PHP functions: Call to a member function function() on a non-object

我对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);将导致语法错误。如果param1param2是字符串,您应该将它们封装在的引号中(双引号或单引号),或者它们是变量,它们前面应该有一个美元符号($)。我猜它们应该是可变的,因为您试图通过引用函数来传递它们(函数声明中的和号&)。

另一件事是,在该函数中有三个必需的参数,但您试图只使用两个参数来调用该函数。因此,您应该在调用函数时提供第三个参数,或者您应该选择第三个选项(通过给它一个默认值)。

在您的情况下,我会将结构更改为以下内容(半伪代码):

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)相呼应?

另外两个注意事项:

  1. 您应该在函数参数中省略&&的意思是"通过引用传递",所以只有当你想修改变量时才使用它,这里不需要。

  2. 方法定义等待3个参数,但只传递2个参数。因此,如果第三个是可选的,您应该给它一个默认值,否则会抛出一条错误消息:

    public function myfunction ($param1, $param2, $sError = null)