2012-03-27 115 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

相關問題