Конструктор, объявляющий соединение с базой данных, не запускается после обновления PHP 8

Я получаю сообщение об ошибке при подключении к базе данных. Он работал до того, как веб-сайт хостинга решил удалить php 7 и добавить php 8.3.

Это коды функции соединения:

class App {

    function App() {
        include('dbInfo.php');
        try {
            $this->dbConn = new PDO("mysql:host=$host;dbname=$dbName",$dbUser,$dbPass, array(
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_PERSISTENT => true
              ));
        } catch (\Throwable $e) {
            die("ERROR: ".$e->getMessage());
        }
    }

    function getConfig() {
        $sql = $this->dbConn->prepare('SELECT * FROM `config`');
        $sql->execute();
        $result = $sql->fetchAll();
        return $result;
    }

}

И это сообщение об ошибке:

Предупреждение: Неопределенное свойство: App::$dbConn в /customers/b/b/1/944.dk/httpd.www/server/dataBase/myServer.php в строке 29
Неустранимая ошибка: необработанная ошибка: вызов функции-члена prepare() для null в /customers/b/b/1/944.dk/httpd.www/server/dataBase/myServer.php:29 Трассировка стека:
#0 /customers/b/b/1/944.dk /httpd.www/server/dataBase/myServer.php(16): App->getConfig()
#1 /customers/b/b/1/944.dk/httpd.www/server/templates/get.php( 5): App->getAll()
#2 /customers/b/b/1/944.dk/httpd.www/server/index.php(3): include_once('/customers/b/b/.. .')
#3 {main} добавлено в /customers/b/b/1/944.dk/httpd.www/server/dataBase/myServer.php в строке 29.

Строка 29 такая:

$sql = $this->dbConn->prepare('SELECT * FROM `config`');

Если этот код находится в КЛАССЕ, покажите его как таковой, в противном случае это набор функций, а для набора функций нет $this

RiggsFolly 20.04.2023 12:47

Можете ли вы опубликовать код уровня класса, а также соответствующие методы?

Koala Yeung 20.04.2023 12:49

Да, это в классе class App(){.....}

moses saleh 20.04.2023 13:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
3
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Начиная с PHP 8.0 метод с тем же именем, что и у класса, больше не рассматривается как конструктор:

class Bar {
    public function Bar() {
        // treated as regular method in PHP 8.0
    }
}

Вот почему ваша функция App() никогда не запускалась для создания $this->dbConn.

Вам нужно переименовать его как function __construct(), чтобы сделать его конструктором.


Обновлено: ранее относитесь к изменению PHP 5.3.3. Изменения в PHP 5.3.3 коснулись только классов пространств имен. Изменение в PHP 8.0 затрагивает событие класса без пространства имен.

function App() { это старый стиль __construct

В PHP8 он больше не вызывается автоматически, что приводит к отсутствию параметра класса.

Переименуйте function App() в public function __construct().

Проверьте Конструкторы в старом стиле

Другие вопросы по теме