2011-10-02 38 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

相关问题