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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
esterio
Отправлено: 15 Ноября, 2013 - 17:40:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




caballero пишет:
Поэтому и используется синглетон чтобы иметь доступ к конекту с люого места

Дополню что он не должен быть в data_base, как описали выше
 
 Top
DelphinPRO
Отправлено: 15 Ноября, 2013 - 18:01:05
Post Id



Активный участник


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


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




caballero пишет:
Поэтому и используется синглетон чтобы иметь доступ к конекту с люого места
Думаю синглтон используют для того, чтобы коннект был один, а то что он доступен глобально - уже побочный эффект )


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
likvidator
Отправлено: 15 Ноября, 2013 - 18:05:52
Post Id


Посетитель


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


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

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. class data_base
  3. {
  4.     protected static $mysqli;
  5.     private function __construct(){
  6.      $this->mysqli = ????;
  7.     }
  8.     private function __clone(){
  9.     }
  10.     public static function getInstance() {
  11.         if (null === self::$mysqli) {
  12.             self::$mysqli = new self();
  13.         }
  14.         return self::$mysqli;
  15.     }
  16. }

Вот как тут теперь приконнектиться к базе? Т.е чтоб return возвращал $mysqli - уже готовый к использованию объект? И функции reg_validate(),reg_send() лучше в этом же классе или другом?
(Добавление)
esterio пишет:
Дополню что он не должен быть в data_base, как описали выше

т.е
likvidator пишет:
функции reg_validate(),reg_send() лучше использовать в другом

(Добавление)
DelphinPRO пишет:
Думаю синглтон используют для того, чтобы коннект был один

PHP:
скопировать код в буфер обмена
  1.  
  2. function s($class){
  3. global $singltone;
  4.     (!empty($class)) or die('empty class in function S');
  5.     if(empty($singltone[$class])){
  6.         $singltone[$class] = new $class;
  7.     }
  8.     return $singltone[$class];
  9. }
 
 Top
caballero
Отправлено: 15 Ноября, 2013 - 18:20:34
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




Цитата:
Вот как тут теперь приконнектиться к базе?

ну так и приконекся в 6 строке


и нафига global $singltone;
если getInstance - статический


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
teddy
Отправлено: 15 Ноября, 2013 - 18:21:25
Post Id


Участник


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


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




likvidator пишет:
Вот как тут теперь приконнектиться к базе? Т.е чтоб return возвращал
$mysqli - уже готовый к использованию объект?

PHP:
скопировать код в буфер обмена
  1.  
  2. class Test{
  3.    static private $_instance = null;
  4.    static function getInstance(){
  5.       if(self::$_instance === null){
  6.          self::$_instance = new mysqli('host', 'login', 'password', 'dbname');
  7.           return self::$_instance;
  8.         }      
  9.       }
  10.    private function __construct(){}
  11.    private function __clone(){}
  12. }
  13. $db = Test::getInstance();
  14. var_dump($db);//object mysqli

(Отредактировано автором: 15 Ноября, 2013 - 18:23:09)

 
 Top
likvidator
Отправлено: 15 Ноября, 2013 - 18:22:18
Post Id


Посетитель


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


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

[+]


caballero пишет:
и нафига global $singltone;
если getInstance - статический

это вообще 2 разные реализации!
(Добавление)
teddy пишет:
likvidator пишет:
Вот как тут теперь приконнектиться к базе? Т.е чтоб return возвращал
$mysqli - уже готовый к использованию объект?

PHP:
скопировать код в буфер обмена
  1.  
  2. class Test{
  3.    static private $_instance = null;
  4.    static function getInstance(){
  5.       if(self::$_instance === null){
  6.         self::$_instance = new mysqli('host', 'login', 'password', 'dbname');
  7.           return self::$_instance;
  8.         }      
  9.       }
  10.    private function __construct(){}
  11.    private function __clone(){}
  12. }
  13. $db = Test::getInstance();
  14. var_dump($db);//object mysqli

благодарю,сразу не дошло)))
(Добавление)
В общем...спасибо всем за ценные и не очень советы... Собрал я все воедино - работает на ура) + много чего усвоил
 
 Top
likvidator
Отправлено: 18 Ноября, 2013 - 22:06:52
Post Id


Посетитель


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


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

[+]


Поговорил я с гуглом - не помог... Надежда на вас...:
PHP:
скопировать код в буфер обмена
  1.  
  2. $stmt=data_base::getInstance()->prepare("SELECT * FROM users WHERE login=? LIMIT 1");
  3.                 $stmt->bind_param('s',$login);
  4.                 $stmt->execute();

Ну вот,собственно, как получить результат? Не буду же я через bind_result() перечислять переменные...
 
 Top
teddy
Отправлено: 18 Ноября, 2013 - 22:19:39
Post Id


Участник


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


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




likvidator пишет:
Не буду же я через bind_result() перечислять переменные...

спешу вас огорчить, но будете Улыбка
 
 Top
likvidator
Отправлено: 18 Ноября, 2013 - 22:22:55
Post Id


Посетитель


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


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

[+]


teddy пишет:
спешу вас огорчить, но будете

http://answerstop[dot]org/question/1[dot][dot][dot]t-from-in-mysqli
Цитата:

$Match = $mysqli->prepare(
'SELECT * FROM tablename WHERE field1 = ? И field2 = ?');
$Match->bind_param('ss', $value, $value2);
$Match->execute();
$мета = $Match->result_metadata();

while ($field = $мета->fetch_field()) {
$параметров[] = &$row[$field->name];
}

call_user_func_array(array($Match, 'bind_result'), $параметров);

while ($Match->fetch()) {
foreach($row в $key => $val) {
$x[$key] = $val;
}
$результатов[] = $x;
}

я не знаю какого лешего он переводит все на русский,но там вроде что-то есть))
(Добавление)
teddy пишет:
спешу вас огорчить, но будете

и если я добавлю 1 поле в таблицу,то будет писец?...
(Добавление)
Цитата:
$stmt->bind_result по-моему самое слабое место класса mysqli_stmt, так как оно обязывает знать, какие именно данные будут получены из запроса и каком порядке они объявлены в запросе. Для случая “SELECT * FROM …” он вряд ли применим. Гораздо более гибкий подход в работе с результатом предлагает класс mysqli_result. Чтобы быть окончательно объективным, стоит упомянуть, что можно воспользоваться функцией $stmt->result_metadata() получить mysqli_result содержащий только о метаданные без самих данных, и посмотреть что за столбцы получены, но этот подход мне кажется излишне сложным, и о нем я упомянул только, чтобы избежать обвинений в неточной информации.

http://habrahabr[dot]ru/post/141127/
 
 Top
teddy
Отправлено: 18 Ноября, 2013 - 23:59:04
Post Id


Участник


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


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




likvidator пишет:
$stmt->bind_result по-моему самое слабое место класса mysqli_stmt, так как оно обязывает знать, какие именно данные будут получены из запроса и каком порядке они объявлены в запросе

и что? наоборот я думаю это даже хорошо
likvidator пишет:
Для случая “SELECT * FROM

забудьте вы про SELECT * я им например пользовался всего несколько раз и то когда начинал... даже слышал что считается дурным тоном и сам так считаю т.к в запросе могут быть получены те данные, которые вовсе не нужны. Простой пример - авторизация. Хорошо будет если выберем только логин и пароль и сравним их с тем что ввел пользователь, например в таком случае дергать id и role нет смысла а звездочка их вытянет в любом случае - хорошо ли это? не думаю... также плюс перечисления полей в том, что названия полей всегда перед глазами в коде(особенно удобно если таблица большая)

likvidator пишет:
и если я добавлю 1 поле в таблицу,то будет писец?...

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

а вышеуказанный пример я бы лично не стал бы использовать

мое мнение...

(Отредактировано автором: 19 Ноября, 2013 - 00:10:12)

 
 Top
tato
Отправлено: 19 Ноября, 2013 - 01:51:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




likvidator пишет:

и если я добавлю 1 поле в таблицу,то будет писец?.


А сделайте модель для таблицы, с перечислением полей, а где нужно дергайте через метод этой модели, например Post::inst()->getAllFields(), а при добавлении нового поля в таблицу добовляете описание этого поля в модель и все.


-----
просто ?: сложно
 
 Top
_Dark_
Отправлено: 19 Ноября, 2013 - 10:37:52
Post Id


Частый гость


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


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

[+]


Я чего-то не понял, есть же mysqli_result::fetch_assoc, в чем вопрос, собственно?
 
 Top
likvidator
Отправлено: 19 Ноября, 2013 - 12:23:38
Post Id


Посетитель


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


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

[+]


_Dark_ пишет:
Я чего-то не понял, есть же mysqli_result::fetch_assoc, в чем вопрос, собственно?

Ну как бы тут о подготовленных запросах идет речь... Или можно пример реальзации,если я чего-то упускаю

(Отредактировано автором: 19 Ноября, 2013 - 12:23:59)

 
 Top
_Dark_
Отправлено: 19 Ноября, 2013 - 12:59:02
Post Id


Частый гость


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


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

[+]


likvidator пишет:
Ну как бы тут о подготовленных запросах идет речь... Или можно пример реальзации,если я чего-то упускаю

likvidator пишет:
Ну вот,собственно, как получить результат? Не буду же я через bind_result() перечислять переменные...


Ладно, если непосредственно по теме, то это единственный вариант, перечислять.
Или используйте PDO.
 
 Top
caballero
Отправлено: 19 Ноября, 2013 - 13:36:55
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




большинство парметров вообще незачем биндить. особено целые числа


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB