2012-03-27 105 views
1

我对PHP很新,所以我不知道如何解决这个错误。我一直在阅读相关帖子在这里,但我说我太少经验知道热应用类似的解决方案:(PHP函数:调用非对象的成员函数function()

事情是这样的: 在我的主要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); 

奇怪的是:

$sent-> 

我使用的显示在上下文窗口myfunction的(),这样我就可以把它捡起来的PHP编辑..这是指:在我的主PHP文件书面方式时SentDocument.php链接良好,功能可用,对吧?

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

非常感谢!

+0

和作用放在类名里面吗?你可以发布类名吗?也许你有一个错字或什么,因为它找不到课程。不要相信你的编辑器:p – w00 2012-03-27 07:39:33

+0

如果你不传递它,你不需要将它改为'&$ sError = null'来使这个参数可选吗? – 2012-03-27 07:39:54

+0

您是否尝试过使用var_dump发送调试$?这样你可以看到你的对象是不是实例化的,这可能是问题。 – 2012-03-27 07:39:57

回答

1

函数myfunction应该在类中才能使用实例调用。所以:

class SendDocument 
{ 
    public function myfunction (&$param1, &$param2, &$sError) 
    { // inside goes an sql query using param1 and param2 
    } 
} 

顺便说一句你为什么要通过引用&添加这些参数。你需要在函数内部改变它们吗?

另外:$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'); 
+0

是的,对不起这是在一个班级里,忘了把它添加到我的文章中,现在是在那里,同样的错误。 – user712027 2012-03-27 07:50:11

+0

@ user712027查看我更新的答案更多的疑难解答或只是看看[这个](http://codepad.viper-7.com/j1Onif)看到它应该工作。 – PeeHaa 2012-03-27 08:01:34

+0

工作,谢谢一吨! – user712027 2012-03-27 08:03:44

0

此错误消息表示,即$sent不是一个对象。你的代码看起来很正确,所以错误必须在你还没有发布的其他地方。我假设你定义了类SendDocument

什么回声var_dump($sent)?其他

有两点需要注意:

  1. 你应该离开了你的函数的参数&&的意思是“通过引用传递”,所以如果你想修改变量,你只在这里使用它,你不需要这里。

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

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

var_dump($ sent)为NULL。我也删除了$ sError和&但没有区别。 – user712027 2012-03-27 07:56:17

+0

@PeeHaa:对不起,当然,函数调用中的&并不推荐使用,而不是定义本身。我删除了令人困惑的句子。 – acme 2012-03-27 08:11:19

相关问题