За последние 24 часа нас посетили 15158 программистов и 1380 роботов. Сейчас ищут 826 программистов ...

Fatal error: Constant expression contains invalid operations in

Тема в разделе "PHP для новичков", создана пользователем Admiral_24, 22 ноя 2018.

  1. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    Fatal error: Constant expression contains invalid operations in
    как передать конфиг?
    PHP:
    1. class DB
    2. {
    3.    public function __construct($config) {
    4. require_once "config.php";
    5.        $config->db['db_host'];
    6.        $config->db['db_name'];
    7.        $config->db['db_user'];
    8.        $config->db['db_pass'];
    9.    }
    10. }
    11.  
    12.    public static $dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
    13.    public static $user = $config['db_user'];
    14.    public static $pass = $config['db_pass'];
    15.  
    16.    /**
    17.      * Объект PDO.
    18.      */
    19.    public static $dbh = null;
    20.  
    21.    /**
    22.      * Statement Handle.
    23.      */
    24.    public static $sth = null;
    25.  
    26.    /**
    27.      * Выполняемый SQL запрос.
    28.      */
    29.    public static $query = '';
    30.  
    31.    /**
    32.      * Подключение к БД
    33.      */
    34.    public static function getDbh()
    35.    {
    36.        if (!self::$dbh) {
    37.             try {
    38.                self::$dbh = new PDO(
    39.                    self::$dsn,
    40.                    self::$user,
    41.                    self::$pass,
    42.                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
    43.                );
    44.                self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    45.            } catch (PDOException $e) {
    46.                exit('Error connecting to database: ' . $e->getMessage());
    47.            }
    48.        }
    49.  
    50.        return self::$dbh;
    51.    }
    config.php
    PHP:
    1. return [
    2. 'db_host'=>'localhost';
    3. 'db_name'=>'test';
    4. 'db_user'=>'root';
    5. 'db_pass'=>'';
     
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    номер строки с ошибкой?
     
  3. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    Ругается на public static $dsn='mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Admiral_24 это так не работает
    PHP:
    1. public $dsn;
    2. public $user;
    3. ....
    4. public function __construct($config){
    5.     $this->dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
    6.     $this->user = ...
    7. }
     
    Admiral_24 нравится это.
  5. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Admiral_24 кавычки
    public static $dsn = 'mysql:dbname='.(вар)$config['(пхп)db_name'].';host='.$config['db_host'];
    юзай двойные чтоли
     
  6. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    Fatal error: Uncaught Error: Access to undeclared static property: DB::$dsn in
    PHP:
    1. class DB
    2. {
    3.    
    4. public $dsn;
    5. public $user;
    6. public $pass;
    7.  
    8. public function __construct($config){
    9.     include "config.php";
    10.     $this->dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
    11.     $this->user = $config['db_user'];
    12.     $this->pass = $config['db_pass'];
    13. }
    14.     /**
    15.      * Объект PDO.
    16.      */
    17.     public static $dbh = null;
    18.  
    19.     /**
    20.      * Statement Handle.
    21.      */
    22.     public static $sth = null;
    23.  
    24.     /**
    25.      * Выполняемый SQL запрос.
    26.      */
    27.     public static $query = '';
    28.  
    29.     /**
    30.      * Подключение к БД
    31.      */
    32.     public static function getDbh()
    33.     {  
    34.         if (!self::$dbh) {
    35.             try {
    36.                 self::$dbh = new PDO(
    37.                     self::$dsn,
    38.                     self::$user,
    39.                     self::$pass,
    40.                     array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
    41.                 );
    42.                 self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    43.             } catch (PDOException $e) {
    44.                 exit('Error connecting to database: ' . $e->getMessage());
    45.             }
    46.         }
    47.  
    48.         return self::$dbh;
    49.     }
     
  7. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    $this->dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
    заменить на
    $this->dsn = 'mysql:dbname='.$config["db_name"].';host='.$config["db_host"];

    кавычки
    --- Добавлено ---
    и закрывающую добавь
    _host"]';
     
  8. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    причем здесь кавычки?
     
  9. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Admiral_24 эммм ну к примеру потому что они необходимы
    у тебя грубо написано так
    $dsn='var'secondvar;
    то есть переменная синтаксически не верно задаётся
     
  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    construct это всегда new
    $db = new DB($config)
     
    Admiral_24 нравится это.