PHP 从另一个 class 呼叫 class

PHP calling class from another class

我想在另一个 class 中调用 PHP class 并得到以下错误:

Fatal error: Call to a member function quote() on a non-object

Class 1:

class logmein {

    //Connect DB
    function dbconnect(){
        require_once('class.MySQL.php');
        $db = new Db();    

    }

    //login function
    function login($username, $password){

        //conect to DB
        $this->dbconnect(); 

        // Quote and escape form submitted values
        $name = $db -> quote($username);                    //throwing error
        $email = $db -> quote($password);                   //throwing error

    }
}

Class 2:

class DB {

    public function quote($value) {
        $connection = $this -> connect();
        return "'" . $connection -> real_escape_string($value) . "'";
    }
}

我称之为:

$log = new logmein();
$log->login('James Bond', '007');

我需要做些什么才能让他们互相呼唤?或者还有其他方法可以做到这一点。非常感谢您的帮助!

$db 对象超出了从 dbconnect()login() 的范围。将其设置为 class 属性,以便您可以在 class:

中的任何位置访问它
class logmein {

    protected $db; // property available to this class and child classes

    //Connect DB
    function dbconnect(){
        require_once('class.MySQL.php');
        $this->db = new Db(); // say "$this" to refer to it

    }

    //login function
    function login($username, $password){

        //conect to DB
        $this->dbconnect(); 

        // Quote and escape form submitted values
        $name = $this->db->quote($username); // works now
        $email = $this->db->quote($password); // works now

    }
}

您需要确保数据库可通过您的 class 函数访问,因此需要将其存储在 class 属性.

class logmein {
    private $db; //store the database object

    //Connect DB
    function dbconnect(){
        require_once('class.MySQL.php');
        $this->db = new Db();    

    }

    //login function
    function login($username, $password){

        //conect to DB
        $this->dbconnect(); 

        // Quote and escape form submitted values
        $name = $this->db->quote($username);
        $email = $this->db->quote($password);

    }
}

也就是说,此设置将您的数据库与登录紧密耦合。考虑研究 'dependency injection' 和其他保持代码组件独立的方法。