Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как заставить класс увидеть переменные в файле? [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
ЧИМ
Отправлено: 19 Февраля, 2017 - 15:07:29
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Строитель пишет:
ЧИМ пишет:
выдаёт ошибку: "Parse error: syntax error, unexpected '[' "
Проверьте версию пхп. Она должна быть не ниже 5.4. Если версия ниже, и нет возможности её поднять, тогда замените строку с сокращённым синтаксисом объявления массива на этот вариант:

static $conns = array();

Пока правил текст вы уже написали ответ. Спасибо за оперативность. Поменял версию на 7.1 Буду на ней всё тестить. Ошибка в синтаксисе пропала, но появились другие. Выше представил код который нормально работает на версии 7.1(имею ввиду не вызывает ошибок)

P.S. Сейчас продолжаю тестить этот способ и столкнулся с тем что я не могу обратиться из файла к подключению mysql. Получается что не возвращает подключение.

(Отредактировано автором: 19 Февраля, 2017 - 15:14:39)

 
 Top
Строитель Модератор
Отправлено: 19 Февраля, 2017 - 16:04:26
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




ЧИМ пишет:
P.S. Сейчас продолжаю тестить этот способ и столкнулся с тем что я не могу обратиться из файла к подключению mysql. Получается что не возвращает подключение.
Ну так вы же "спрятали" обе функции внутрь класса SqlDB, и теперь они находятся в его области видимости. Теперь для работы с этими функциями, веренее - уже методами, вам надо создать экземпляр класса SqlDB, и обращаться уже к объекту. Примерно так:

connect_1.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. return [
  4.     'HOST'=>'localhost',
  5.     'DB'=>'base',
  6.     'LOGIN'=>'user',
  7.     'PASSW'=>'12345',
  8.     'charset'=>'utf8'
  9. ];


SqlDB.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class SqlDB
  4. {
  5.     public function conn($DB)
  6.     {
  7.         static $conns = [];
  8.  
  9.         if (!isset($conns[$DB])) {
  10.             extract(require 'apteka/config/connect_1.php');
  11.             $conns[$DB] = new mysqli($HOST,$LOGIN,$PASSW,$DB);
  12.             $conns[$DB]->set_charset($charset);
  13.         }
  14.  
  15.         return $conns[$DB];
  16.     }
  17.  
  18.     public function myDatabase() {
  19.         return $this->conn('my_database');
  20.     }
  21. }
  22.  
  23.  
  24. $obj = new SqlDB;
  25. $obj->myDatabase();
  26.  
  27.  
 
 Top
ЧИМ
Отправлено: 19 Февраля, 2017 - 21:22:36
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




А существует ли какой нибудь способ запихнуть данную конструкцию в конструктор класса "extends mysqli"? Чтоб можно было после создания объекта класса сразу делать запросы типа:
PHP:
скопировать код в буфер обмена
  1.  
  2. $con= new SqlDB();
  3. $con->query('USE '.$DB.';');
  4.  

Вместо:
PHP:
скопировать код в буфер обмена
  1. $con= new SqlDB();
  2. $con->conSQL()->query('USE '.$DB.';');


Сейчас я использую вот такую конструкцию:

connect.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. return [
  4.     'HOST'=>'localhost',
  5.     'DB'=>'base',
  6.     'LOGIN'=>'user',
  7.     'PASSW'=>'12345',
  8.     'charset'=>'utf8'
  9. ];


SqlDB.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class SqlDB{
  3.    public function conSQL()
  4.     {
  5.         static $con;
  6.             extract(require 'apteka/config/connect.php');
  7.             $con = new mysqli($HOST,$LOGIN,$PASSW);
  8.             $con->set_charset($charset);
  9.         try {
  10.             $con->query('USE '.$DB.';');
  11.         } catch (Exception $ex) {
  12.             extract(require 'apteka/config/connect.php');
  13.             $con = new mysqli($HOST,$LOGIN,$PASSW);
  14.             $create_db='CREATE DATABASE IF NOT EXISTS `'.$DB.'` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ';
  15.             $con->query($create_db);
  16.             $con->query('USE '.$DB.';');
  17.             $con->set_charset($charset);
  18.         }
  19.         return $con;
  20.     }
  21. }


В классе я проверяю создана ли БД и если не создана, то создаю её взяв имя базы из настроек файла, перед этим соединившись с сервером MYSQL.
Я понял плюс конструкции которую вы мне предложили, но у меня база будет одна и создаваться она будет в самом начале, когда мастер создания подключения запрашивает данные. По этому я немного упростил конструкцию, не знаю правильно ли всё получилось, но вроде бы всё работает.
Спасибо большое за помощь: Строитель и armancho7777777. Благодаря вам я черпнул ещё знаний.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB