在非对象上调用成员函数Check()

时间:2013-07-13 23:35:05

标签: php class function

我有一个php类的问题,我会把一个类的函数中的return = true或false带到另一个类的另一个函数

<?php

class CheckCity {

    private $x = 10;
    private $y = 10;

    public function __construct () {

        $this->x = rand(10, 10);
        $this->y = rand(10, 10);

    }

    public function Check() {

        $exists =  mysql_query("SELECT * FROM _users WHERE x = $this->x AND y = $this->y LIMIT 1");

        if ( mysql_num_rows ( $exists ) == 1 ) {

            return true;

        } else {

            return false;

        }

    }

}

class setCity extends CheckCity {

    public function Set() {
        parent::Check();
        if ( $setcity->Check() == true ) {

            echo "is TRUE";

        } else {

            echo "is FALSE";

        }

    }

}

这是索引:

<?php

$conn = mysql_connect('localhost', 'root', '') or die ('Error 1.');
mysql_select_db('db', $conn) or die ('Error 2.');

include "func.php";

$checkcity = new CheckCity();
$checkcity->Check();

$setcity = new setCity();
$setcity->Set();

所以这是错误:

Fatal error: Call to a member function Check() on a non-object in /func.php on line 37

我搜索了错误谷歌,我尝试了很多解决方案但无济于事。

3 个答案:

答案 0 :(得分:2)

您的代码:

$setcity->Check()

应该是:

$this->Check()

答案 1 :(得分:0)

错误在于:

 if ( $setcity->Check() == true ) {

$ setcity未声明为SetCity类的新实例。

class setCity extends CheckCity {

    public function Set() {
        if ( $this->Check() ) {

            echo "is TRUE";

        } else {

            echo "is FALSE";

        }

    }

}

请参阅using $this or parent:: to call inherited methods?

这不是绝对必要的,但我建议你这样做,以防你重写你的类中的方法(正在扩展的方法)。

答案 2 :(得分:0)

在您的setCity类中,您正在引用未声明的变量$setcity并尝试在其上调用函数。由于$setcity中没有类,因此php会引发致命错误。

如果您想对该对象的方法中的当前对象进行操作,请使用$this关键字。

PS。您应该阅读一些有关命名类及其方法的编程最佳实践... :)