2014-10-10 3 views
0

Может ли кто-нибудь сказать мне, почему это не работает.Почему эта переменная php не определена

class class1 { 

    private $database; 

    function class1() 
    { 

     $database = $this->connect(); 


    } 

    private function connect(){ 

     $database = mysqli_connect("localhost","username","","db"); 

     if (mysqli_connect_errno()) { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 

     return $database; 

    } 

    private function usedb(){ 
     $query = "some sql"; 
     mysqli_query($database,$query); 
    } 

} 

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

+5

Поскольку переменная _has_ gone вне сферы действия. '$ database' - локальная переменная в вашей функции; вы должны использовать '$ this-> database' для доступа к свойству класса. – andrewsi

+0

@andrewsi прав: в PHP вам нужно * использовать ключевое слово 'this' для доступа к членам класса, в отличие, скажем, от Java или C#. – SolarBear

ответ

2

Это потому, что в class1() вы объявляете другую локальную переменную $database через:

$database = $this->connect(); 

Чтобы установить и получить доступ к $database свойство класса следует использовать:

$this->database = $this->connect(); 

То же самое касается функции usedb() :

private function usedb(){ 
    $query = "some sql"; 
    mysqli_query($this->database,$query); 
} 

Так что ваш окончательный код должен выглядеть следующим образом:

class class1 { 

    private $database; 

    function class1() 
    { 
     $this->database = $this->connect(); 
    } 

    private function connect() 
    { 
     $database = mysqli_connect("localhost","username","","db"); 

     if (mysqli_connect_errno()) 
     { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 
     return $database; 
    } 

    private function usedb() 
    { 
     $query = "some sql"; 
     mysqli_query($this->database,$query); 
    } 
} 

Примечание:

То же самое относится и к $database переменной в connect() функции. Хотя с одинаковым именем, он не имеет ничего общего с внешним $database переменной, так что должен быть доступ с помощью $this->database (при необходимости)

0

изменение

$database = $this->connect(); 

в

$this->database = $this->connect(); 

и все $database переменное изменение на $this->database для set

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