2015-01-14 2 views
0

Я хочу, чтобы вызвать класс PHP в другом классе и получить следующее сообщение об ошибке:PHP вызывающий класс от другого класса

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

Класс 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 

    } 
} 

Класс 2:

class DB { 

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

Я называю это:

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

Что мне нужно сделать, чтобы называть их друг другом? Или есть другой способ сделать это. Большое спасибо за помощь!

+0

Возможный дубликат [Что такое класс в PHP?] (Http://stackoverflow.com/questions/2206387/what-is-a-class-in-php) – Ryan

+0

смотрит на меня, что $ db не отображается вне logmein :: dbconnect – Jasen

ответ

1

Объект $db не входит в сферу применения от dbconnect() до login(). Установите его как свойство класса, а не так что вы можете получить доступ к нему в любом месте в своем классе:

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 

    } 
} 
0

Вы должны быть уверены в том, что БД доступна через ваши функции класса, поэтому он должен быть сохранен в свойстве класса.

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); 

    } 
} 

Это, как говорится, эта установка тесно связана с вашей базой данных с логином. Изучите «инъекцию зависимостей» и другие способы разделить компоненты кода.

Смежные вопросы