Может кто-нибудь сказать мне, почему это не работает.
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». Как будто переменная вышла из области видимости … Кто-нибудь может дать мне решение?
Это потому, что в 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
(если нужно)
менять
$database = $this->connect();
в
$this->database = $this->connect();
и все $database
изменение переменной на $this->database
за set