За последние 24 часа нас посетили 22945 программистов и 1225 роботов. Сейчас ищут 824 программиста ...

Parse error: syntax error, unexpected '$config' (T_VARIABLE), expecting function (T_FUNCTION) or con

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

  1. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    Parse error: syntax error, unexpected '$config' (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST) in

    Код (Text):
    1. return [
    2. 'db_name'=>'test',
    3. 'db_host'=>'localhost',
    4. 'db_user'=>'root',
    5. 'db_pass'=>'',
    6. 'db_charset'=>'utf8',
    7. ];
    Код (Text):
    1. class DB
    2. {
    3.    
    4.  
    5.     $config = require_once('config.php');
    6.     public static $dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
    7.     public static $user = $config['db_user'];
    8.     public static $pass = $config['db_pass'];
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Версия пхп?
    --- Добавлено ---
    Ну и дебажить пробовал? Первое, что надо проверить - содержимое переменной после реквайра.

    Далее. У тебя там реквайр ванс. Если ты ентот код выполнишь более двух раз, то в первом случае он сработает, а во втором нет.

    Крч направления даны - разрабатывай варианты.
     
  3. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Просто так код в полях класса не пишется. Заполняйте значениями в конструкторе.
     
    MouseZver нравится это.
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    вообще есть trait extends раз за оопи взялся
     
  5. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Но желательно учиться без них обходиться.
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну для конфигов возможно:) Но я бы создал отдельный класс который в зависимости от переданного значения будет отдавать нужный файл \Config::get('database') или хелпер config('database')
     
  7. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Вообще для всего, а не только для конфигов.

    Один глобальный костыль другим глобальным костылём менять? Нет уж.
     
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @ElisDN абстракция всегда можно изменить дописать переписать добавить любой функционал и т.д
     
  9. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Эта абстракция пусть в конфиге и остаётся. Зачем её в классе DB вызывать?
     
  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @ElisDN Ну банально если вдруг захочешь изменить путь к файлам конфигурации переписать гетер сетер закешировать и т.д
     
  11. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Ну остаьте это в самой абстракции конфига, а в DB передавайте уже готовые параметры, чтобы конструктор лишней зависимостью на вызов Config::get не загаживать.
     
  12. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @ElisDN Ну так у него вообще хаос если он уберет require в construct лучше от этого не станет
     
  13. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Как сказал классик,
     
  14. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Вот тут согласен. Классик еще говорил о том что ты любишь подмену понятий:) Разговор начинается об одном потом плавно перетекает в другое и вот уже из набора слов можно крутить вертеть как вздумается.
     
  15. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Хорошо, что в программировании ты согласен с тем, что говоришь о вещах, в которых не разбираешься.
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    @nospiou, там действительно как подметил @ElisDN, код в 5 строке не туда заехал. Примерно тому, что воздух в космос вытек
     
  17. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @MouseZver так а где я с этим спорил? Я говорю что вместо require нужна обертка над конфигами.
     
  18. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Внутри DB не нужно ни require, ни обёртки.
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Вообще в этих классах DB, если это не нормальный фреймворк, ничего полезного нету, достаточно экземляр mysqli или PDO положить в какой-нибудь Registry
     
  20. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    если вывести масив на екран данные получаю вне класа
    PHP:
    1. $config = require_once('config.php');
    2. print_r $config;
    версия php 7.2
     
  21. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @ElisDN mkramer врать не будет. А обертку над конфигами в любом случаи нужно сделать и не важно где они будут запрашиваться.
    @Admiral_24 Ну тебе ж уже подсказали самый простой вариант
    Код (Text):
    1. private $config;
    2. public function __construct() { $this->config=require_once('config.php'); }
    хотя в твоем случаи со static там вообще хаос
     
  22. Admiral_24

    Admiral_24 Новичок

    С нами с:
    18 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    сделал вот так не уверен что так делать стоит но заработало
    в config.php прописал константы
    PHP:
    1. define('DB_HOST', 'localhost');
    2. define('DB_NAME', 'test');
    3. define('DB_USER', 'root');
    4. define('DB_PASS', '');
    5. define('DB_CHAR', 'utf8');
    а в класе
    PHP:
    1. include_once("config.php");
    2.  
    3. class DB
    4. {
    5.    
    6.  
    7.     public static $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST;
    8.     public static $user = DB_USER;
    9.     public static $pass = DB_PASS;
    не то конечно что хотел но не получается передать данные с массива для подключения только учусь....
     
  23. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Ну хоть кто-то трейты для ООП советовать не будет. И то хорошо.

    Уже кучи систем для чтения конфигов и внедрения зависимостей напридумывали вместо своих обёрток, синглтонов и констант.

    Либо:
    Код (Text):
    1. class DB {
    2.     public function __construct(array $params) { ... }
    3. }
    либо:
    Код (Text):
    1. class DB {
    2.     private $pdo;
    3.     public function __construct(PDO $pdo) {
    4.         $this->pdo = $pdo;
    5.     }
    6. }
    либо напрямую брать new PDO(...). Без всяких require и статики в классах.

    И заполнить всё в контейнере.
     
    #23 ElisDN, 19 ноя 2018
    Последнее редактирование: 19 ноя 2018
  24. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну наконец то от тебя почти что то стоящее. Вот тут практически согласен. Писать свой дырявый mvc когда есть целые готовые фреймворки это глупо.
     
  25. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Ну и зачем тогда учите людей ларавеловскому и другому говнокоду:
    раз со мной и mkramer согласны?

    Зачем костыли с лишней связанностью и синглтоны советуете? Вот и говорю вам вашими же словами, что "ты говоришь о вещах в которых не разбираешься".

    Увы, но опять нет.

    Писать свой дырявый недо-Web-MVC до других фреймворков весьма глупо.
    Писать свой кастомный Web-MVC после других фреймворков вполне умно.