mysqli — почему эта переменная 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 ()» была ссылка на неопределенную переменную «database». Как будто переменная вышла из области видимости … Кто-нибудь может дать мне решение?

0

Решение

Это потому, что в 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 (если нужно)

2

Другие решения

менять

$database = $this->connect();

в

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

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

0

По вопросам рекламы [email protected]