2015-07-23 5 views
1

Изучение ООП с помощью PHP Я создал класс базы данных, но получаю неопределенную переменную db_host db_name db_username и db_password. Я попытался с $ this-> db_host, который удаляет неопределенную переменную для db_host, но затем я получаю фатальную ошибку, говорящую «Использовать $ this, если не в контексте объекта».PHP OOP - класс базы данных (неопределенная переменная)

<?php 
class database 
{ 
    private $db_host = ""; 
    private $db_username = ""; 
    private $db_password = ""; 
    private $db_name = ""; 

    static function connect() 
    { 
     try { 
      new PDO("mysql:host=" . $db_host . '; dbname=' . $db_name, $db_username, $db_password); 
      setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch (PDOException $db_error) { 
      echo $db_error->getMessage(); 
     } 
    } 
} 
?> 
+3

Это связано с вашим методом: 'static' – Daan

ответ

1

Вы не можете получить доступ к статическим полям не являющемуся экземпляра от статических функций (но вы можете получить доступ к статическим полям экземпляра и функцию из не статического метода). Кроме того, вы неправильно используете функцию «setAttribute».

Вы должны либо сделать ваши переменные экземпляра статические и использовать self ключевое слово:

class database 
{ 
    private static $db_host = "..."; 
    private static $db_username = "..."; 
    private static $db_password = "..."; 
    private static $db_name = "..."; 

    public static function connect() 
    { 
     try { 
      $dbConnection = new PDO("mysql:host=" . self::$db_host . '; dbname=' . self::$db_name, self::$db_username, self::$db_password); 
      $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch (PDOException $db_error) { 
      echo $db_error->getMessage(); 
     } 
    } 
} 

Или сделать ваши функции не статичны и относятся к переменным класса с $this ключевого слова:

class database 
{ 
    private $db_host = "..."; 
    private $db_username = "..."; 
    private $db_password = "..."; 
    private $db_name = "..."; 

    public function connect() 
    { 
     try { 
      $dbConnection = new PDO("mysql:host=" . $this->db_host . '; dbname=' . $this->db_name, $this->db_username, $this->db_password); 
      $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch (PDOException $db_error) { 
      echo $db_error->getMessage(); 
     } 
    } 
} 

Что будет вы используете переменную «dbConnection»? Сейчас это не служит никакой цели. Вы должны указать return или связать с ним другое поле экземпляра.

+0

Еще ошибка: Неустранимая ошибка: использование $ this, если не в контексте объекта. Изменено на публичную функцию и использовало $ this-> для моих переменных. – Johnny

+0

Не может быть. Убедитесь, что у вас больше нет статического ключевого слова, и посмотрите на мое редактирование функции «setAttribute». – TechWisdom

+0

Переменная dbConnection не написана мной, я не использую это. Но у вас есть ответ здесь. Экземпляр переменной статичный и используя self! – Johnny

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