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

时间:2012-03-27 07:35:38

标签: php

我是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链接得很好,而且功能可用,对吗?

那么为什么我会收到错误?我究竟做错了什么?

万分感谢!

2 个答案:

答案 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);会导致语法错误。如果param1param2是字符串,则应将它们封装在引号(双精度或单数)中,或者它们是变量,它们应该在其前面有一个美元符号($)。我的猜测是它们应该是变量的,因为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)

另外两个注释:

  1. 您应该在函数参数中省略&&表示“按引用传递”,因此只有在您想要修改变量时才使用它。

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

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