PHP OOP,未定义属性。我怎样才能让它发挥作用?

时间:2015-04-22 19:25:57

标签: php oop

好的,所以我基本上都在努力改进PHP OOP,但是我不太清楚我应该怎么做。有人可以指出这个问题吗?

代码返回以下错误:

注意:未定义的属性:registration :: $ userExist 致命错误:在非对象上调用成员函数fetch()

班级:

class registration extends connect{

        public function userExist(){
            global $dsn;

        $userExist = $this->dsn->prepare("
            SELECT * FROM accounts
            WHERE username= :username
            ");

$userExist->bindParam(':username', $username);
            $userExist->execute();

        $rows = $this->userExist->fetch(PDO::FETCH_NUM);
            return $rows;
        }

我如何尝试在网页上使用该课程:

$conn = new connect();
$registration  = new registration();

$rows = $registration->userExist();
                    if($rows < 1){
// do something

3 个答案:

答案 0 :(得分:4)

错误说它找到了变量$ userExist,这是因为在最后一行你在“$ this”中寻找变量“$ userExist”,而你将它定义为正常变量,在它上面几行。 / p>

要解决此问题,请删除提供错误的行的this->部分,以便从本地范围中获取变量

$rows = $userExist->fetch(PDO::FETCH_NUM);

修改 您在评论中说,在调用方法userExists()之前,已正确定义变量$ username。但是,在调用php变量时,不会将它们复制到函数代码块的内部。要传递变量,您需要在函数中添加一个参数。

public function userExist($username){
        ...
        $rows = $userExist->fetch(PDO::FETCH_NUM);
        ....
    }

你需要像以下一样使用它:

....
$rows = $registration->userExist($username);
....

答案 1 :(得分:0)

这是因为您在课程dash中没有属性1

只需更改

userExist

registration

答案 2 :(得分:0)

您不需要$ this-&gt; userExist

class registration extends connect{
  public function userExist(){
        global $dsn;
        $this->dsn = $dsn; // assign global $dsn to $this->dsn
        $userExist = $this->dsn->prepare("SELECT * FROM `accounts` WHERE `username`= :username");
        $userExist->bindParam(':username', $username);
        $userExist->execute();
        $rows = $userExist->fetch(PDO::FETCH_NUM);
            return $rows;
        }