2013-06-28 16 views
-5

Я получаю эту ошибкуНеопознанный переменной после того, как был объявлен

Fatal error: Non-static method Connect::connect() cannot be called statically in D:\xampp\htdocs\Panel\core\init.php on line 63 

Вот мой код

<?php 
class Connect{ 
    public $db_host = "localhost"; 
    public $db_user = "root"; 
    public $db_pass = ""; 
    public $db_name = "panel"; 

    public function connect(){ 
      if(mysql_connect($db_host, $db_user, $db_pass)){ 
        if(mysql_select_db($db_name)){ 
          return true; 
        }else{ 
          die(mysql_error()); 
        } 
      }else{ 
        die(mysql_error()); 
      } 
      return false; 
    } 
} 
?> 

Как сделать функцию статической? Я пытался добавить «статические» в области видимости функции, но я получил другую ошибку

спасибо :)

+2

http://php.net/manual/en/language.variables.scope.php – Musa

+0

Почувствуйте масштаб, молодой Скайуокер, область вокруг вас. Не поддавайтесь гобалам, темной стороне сферы. –

+1

При написании нового кода вы не должны использовать 'mysql_query'. Это устаревший интерфейс, который удаляется из PHP. – tadman

ответ

4

Вы должны передать переменные функционировать в качестве параметра

function connect($db_host, $db_user, $db_pass,$db_name) 

И называют эту функцию,

connect($db_host, $db_user, $db_pass,$db_name); 

Редактировать

Увидев ваш pastebin, вы вызываете переменные класса, вы должны использовать $this->variale_name для доступа к ним.

<?php 
class Connect{ 
    public $db_host = "localhost"; 
    public $db_user = "root"; 
    public $db_pass = ""; 
    public $db_name = "panel"; 

    public function connect(){ 
      if(mysql_connect($this->db_host, $this->db_user, $this->db_pass)){ 
        if(mysql_select_db($this->db_name)){ 
          return true; 
        }else{ 
          die(mysql_error()); 
        } 
      }else{ 
        die(mysql_error()); 
      } 
      return false; 
    } 
} 
?> 

PDO

<?php 
class Connect{ 
    private $db_host = "localhost"; 
    private $db_user = "root"; 
    private $db_pass = ""; 
    private $db_name = "panel"; 
    private $dbh = false; 
    public function connect(){ 
     if ($this->dbh === false) 
      $this->dbh = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name, $this->db_user, $this->db_pass); 
     return $this->dbh; 
    } 
} 
?> 
+0

http://pastebin.com/3pXYTPrq Это не сработало ... – Isaac

+0

@Isaac Показать ваш код, он содержит только сообщения об ошибках. –

+1

@ Исаак это действительно работает, он делает. –

1

Вы должны объявить переменные внутри функции, как этот

<?php 

function connect(){ 

    $db_host = "localhost"; 
    $db_user = "root"; 
    $db_pass = ""; 
    $db_name = "panel"; 

    if(mysql_connect($db_host, $db_user, $db_pass)){ 
     if(mysql_select_db($db_name)){ 

     }else{ 
      die(mysql_error()); 
     } 
    }else{ 
     die(mysql_error()); 
    } 
} 
?> 

Или вы можете передавать параметры в функции, как это

$db_host = "localhost"; 
$db_user = "root"; 
$db_pass = ""; 
$db_name = "panel"; 

connect($db_host,$db_user, $db_pass, $db_name); 

function connect($db_host,$db_user, $db_pass, $db_name){ 


     if(mysql_connect($db_host, $db_user, $db_pass)){ 
      if(mysql_select_db($db_name)){ 

      }else{ 
       die(mysql_error()); 
      } 
     }else{ 
      die(mysql_error()); 
     } 
    } 
    ?> 
+0

+1 на хороший ответ, но можете ли вы работать с PDO? Довольно простое изменение ответа, чтобы показать, как это делается. –

-1
$db_host = "localhost"; 
$db_user = "root"; 
$db_pass = ""; 
$db_name = "panel"; 

Эти переменные являются глобальными и не могут быть доступны в функции connect. Если вам нужно использовать эти глобальные переменные, используйте ключевое слово global. Тогда эти вары будут доступны внутри функции.

function connect(){ 
     global $db_host, $db_user, $db_pass, $db_name ; 
     if(mysql_connect($db_host, $db_user, $db_pass)){ 
      if(mysql_select_db($db_name)){ 

      }else{ 
       die(mysql_error()); 
      } 
     }else{ 
      die(mysql_error()); 
     } 
    } 
+0

Глобалы всегда плохие советы. –