2011-10-02 52 views
-2

可能重複:
Call to a member function on a non-object - works localhost but not online試圖讓非對象PHP錯誤的性質

不知道如何解決這個問題,這是基本的,但不能找到一個解決方案。 我使用兩個文件:connect.php和user.php。

在connect.php

是連接類:

class Connect{ 
var $logged; 
function login($username, $password){ 
    ..more code.. 
    if($pass==$password){ 
     $this->logged=true;  // db connection is fine, this works 
           // checked it with echo $this->logged; 
    } 
} 
} 

,當我從另一個文件,user.php的這樣稱呼它:

$user=new Connect; 
$user->login(); 
echo $user->logged;  // ERROR Trying to get property of non-object 

爲什麼這個代碼不工作,但它離線工作(本地)?

+0

您的類定義缺少'}'。請不要發佈非工作代碼示例。 – hakre

+0

我知道這是一個重複的帖子,我真的很抱歉,我希望我沒有這個問題,但我真的需要幫助。 – phpEnthusiast

+0

@phpEnthusiast:請不要複製問題,因爲你的第一個問題沒有得到你喜歡看到的答案(如果有的話)。更好地思考爲什麼用戶無法回答你的問題。 – hakre

回答

2

你有幾個問題:

  1. 當你調用$user->login,PHP是假設你所訪問的對象屬性,而不是功能;你需要$user->login()(注意()),這將調用該方法。
  2. 您的示例缺少}

演示:

<?php 

class Connect{ 
    var $logged; 
    function login($username, $password){ 
     $pass = 'test'; 
     if($pass == $password){ 
      $this->logged = true; 
     } 
    } 
} 

$user = new Connect; 
$user->login('test','test'); 
print_r($user); 

?> 

​​

輸出:

Connect Object 
(
    [logged] => 1 
) 

1是什麼true打印。

+0

問題是我沒有得到[登錄] => 1 - 而不是我得到的錯誤消息:試圖獲取非對象的屬性 – phpEnthusiast

+0

不是從上面的代碼 –

+0

我假設你正在談論你的實際代碼(如在其他問題中發現的那樣)。當你得到那個錯誤時,這是​​因爲對象創建不起作用(文件沒有被創建,變量創建不正確或者沒有被創建)發生在訪問代碼之前,或者其他一些問題)將'include_once'改爲'require_once'並確保錯誤報告已經打開,我猜這與'Connect.php'不在當前目錄中有關。 –

0

要在類的外部訪問類屬性,你需要將其聲明爲「公共」:

class Connect{ 
public $logged; 
+1

var'會棄用'var',請參閱http://www.nusphere.com/kb/phpmanual/language.oop.htm(只是說,最好是編寫'public') – hakre

+0

這就是'var'所做的。這是遺留的,但用'var'做它並沒有錯。 –

+0

也,我知道這個代碼「應該」的工作,因爲它在本地,但不知道爲什麼我得到錯誤,當我嘗試在網上運行它 – phpEnthusiast