Неопределенная переменная в классе … но я ее определяю

#php #mysql #database

#php #mysql #База данных

Вопрос:

Я пытаюсь создать класс для своей базы данных: структура класса, как показано ниже

 <?php
    require_once("config.php"); // include(Username, passowrd, server and databaseName)
    class MySQLDatabase{
        private $connection;

        function __construct(){
            $this->openConnection();
        }

        public function openConnection(){
            $this->$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PWD, DB_NAME);
            if(!$connection){
                die("Database connection failed: ".mysql_error);
            }
        }

    }
    $database = new MySQLDatabase();
    $db =amp;$database;

 ?>
  

тогда моим первым шагом было проверить, работает эта погода или нет. поэтому я кодирую index.php файл, как показано ниже

     <?php                   
require("../includes/database.php");                                       if(isset($database)){
echo "true";
}else{
echo "false";
}
    ?>
  

после этого я запускаю программу и получаю ошибки, как показано ниже. Я не могу понять причину. Я гуглю это, и для этого нет четкого решения. может ли кто-нибудь помочь мне понять, почему это происходит и как это решить?

( ! ) Обратите внимание: неопределенная переменная: соединение в C:wampwwwwaytoitsincludesdatabase.php

 on line 9
Call Stack
#   Time    Memory  Function    Location
1   0.0005  240792  {main}( )   ..index.php:0
2   0.0008  249872  require( 'C:wampwwwwaytoitsincludesdatabase.php' ) ..index.php:3
3   0.0013  250528  MySQLDatabase->__construct( )   ..database.php:55
4   0.0013  250592  MySQLDatabase->openConnection( )    ..database.php:15

( ! ) Fatal error: Cannot access empty property in C:wampwwwwaytoitsincludesdatabase.php on line 9
Call Stack
#   Time    Memory  Function    Location
1   0.0005  240792  {main}( )   ..index.php:0
2   0.0008  249872  require( 'C:wampwwwwaytoitsincludesdatabase.php' ) ..index.php:3
3   0.0013  250528  MySQLDatabase->__construct( )   ..database.php:55
4   0.0013  250592  MySQLDatabase->openConnection( )    ..database.php:15
  

Комментарии:

1. В контексте этой функции это if (!$this->connection) не должно быть if (!$connection)

2. mysql_error собирается выдавать уведомления о неопределенной константе. Вы имеете в виду использовать mysqli_connect_error() там для последней ошибки подключения, выданной mysqli php.net//manual/en/mysqli.connect-error.php

Ответ №1:

Вы используете $this->$connection вместо $this->connection . Удалите $ вход connection и повторите попытку.

Ответ №2:

$this::$connection $ сохранением) будет ссылаться на статическую переменную. Поскольку у вас есть переменная класса, вы должны получить к ней доступ через $this->connection

Также вам нужно использовать те же инструкции в вашем if -statement .

Комментарии:

1. не понимаю, почему это принятый ответ, поскольку он не имеет ничего общего со статическими переменными. ответы @EmCo кажутся более подходящими

2. вы правы, я указал неправильный оператор. Для статических переменных это должно быть $this::$connection или лучше self::$connection . Я обновлю свой ответ.