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
Форумы портала PHP.SU :: Версия для печати :: Singletone
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Singletone

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

1. Данил Банаев - 07 Февраля, 2012 - 12:18:00 - перейти к сообщению
Дан класс соединения с БД.
Ломаю голову не могу понять самую полседнюю строчку кода.

Почему DbConn::getInstance() может работать с метод query(), этот метод же является собственностью класса SQLiteDatabase?

В DbConn::getInstance() лежит экземпляр класса DbConn, как этот экземпляр может обращятся к query() ?

Код рабочий и правильно написан это 100% я просто не могу саму идеологию уловить.
Объясните пожалуйста.
PHP:
скопировать код в буфер обмена
  1. class DbConn{
  2.         const DB_NAME="mydb.db";
  3.         private $_db;
  4.         static private $_instance=null;
  5.         private function __construct(){
  6.                 $this->_db=new SQLiteDatabase(self::DB_NAME);
  7.                        
  8.         }
  9.         private function __clone(){}
  10.         static function getInstance(){
  11.                 if(self::$_instance==null){
  12.                         self::$_instance=new DbConn();
  13.                 }
  14.                 return self::$_instance;
  15.         }
  16. }
  17. $sql="SELECT * FROM tb1";
  18. DbConn::getInstance()->query($sql);


Спасибо за помощь
2. Zuldek - 07 Февраля, 2012 - 12:47:22 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. private function __construct(){
  2.                 $this->_db=new SQLiteDatabase(self::DB_NAME);
3. caballero - 07 Февраля, 2012 - 13:00:31 - перейти к сообщению
Цитата:
Почему DbConn::getInstance() может работать с метод query(), этот метод же является собственностью класса SQLiteDatabase?

не может
4. snikers987 - 07 Февраля, 2012 - 15:31:50 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class DbConn{
  2.         const DB_NAME="mydb.db";
  3.         private static $_db;
  4.         static private $_instance=null;
  5.         private function __construct(){
  6.                 self::$_db=new SQLiteDatabase(self::DB_NAME);
  7.                        
  8.         }
  9.         private function __clone(){}
  10.         static function getInstance(){
  11.                 if(self::$_instance==null){
  12.                         self::$_instance=new DbConn();
  13.                 }
  14.                 return self::$_db;
  15.         }
  16. }
  17. $sql="SELECT * FROM tb1";
  18. DbConn::getInstance()->query($sql);


Так нужно сделать..
5. kappa - 08 Февраля, 2012 - 00:04:13 - перейти к сообщению
Вообще то не new SQLiteDatabase
а new SQLite3 или
new PDO(sqlite:/path/my.db)
6. Зверь - 08 Февраля, 2012 - 05:41:15 - перейти к сообщению
kappa пишет:
Вообще то не new SQLiteDatabase
а new SQLite3 или
new PDO(sqlite:/path/my.db)

Дану?
7. Okula - 08 Февраля, 2012 - 07:34:34 - перейти к сообщению
Зверь, вообще-то SQLite и SQLite3 это 2-е разные вещи.
http://www.php.net/manual/ru/book.sqlite3.php
8. Зверь - 08 Февраля, 2012 - 07:59:15 - перейти к сообщению
А кто-то говорил о версии sqlite?
9. kappa - 08 Февраля, 2012 - 09:04:01 - перейти к сообщению
[quote=Зверь][/quote]
Точно, ошибся., я с первыми версиями толком не работал.
Но лучше вообще перейти на PDO.
10. Данил Банаев - 08 Февраля, 2012 - 11:10:31 - перейти к сообщению
Спасибо всем.
Вроде бы разобрался.
PHP:
скопировать код в буфер обмена
  1. class DbConn{
  2.  
  3.         const DB_NAME="mydb.db";
  4.  
  5.         private $_db;
  6.  
  7.         static private $_instance=null;
  8.  
  9.         private function __construct(){
  10.  
  11.                 $this->_db=new SQLiteDatabase(self::DB_NAME);
  12.  
  13.                        
  14.  
  15.         }
  16.  
  17.         private function __clone(){}
  18.  
  19.         static function getInstance(){
  20.  
  21.                 if(self::$_instance==null){
  22.  
  23.                         self::$_instance=new DbConn();
  24.  
  25.                 }
  26.  
  27.                 return self::$_instance;
  28.  
  29.         }
  30.         function selectFromDb($sql){
  31.                 $result=$this->_db->query($sql);
  32.                 if($result)
  33.                          return $result;
  34.                 else
  35.                          return null;
  36.         }
  37. }
  38.  
  39. $sql="SELECT * FROM tb1";
  40.  
  41. DbConn::getInstance()->selectFromDb($sql);
11. almair - 15 Февраля, 2012 - 12:41:56 - перейти к сообщению
Попробовал повторить на PDO вываливается с ошибками, что не так?
CODE (htmlphp):
скопировать код в буфер обмена
  1. class DbConn{
  2.  
  3.        
  4.  
  5.         private $_db;
  6.  
  7.         static private $_instance=null;
  8.  
  9.         private function __construct(){
  10.                define ("SQLCHARSET", "uft8" );
  11.                echo "mysql:host=".DB_HOST.";dbname=".DB_NAME.",".DB_USER.",".DB_PASS;
  12.                 $this->_db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.",".DB_USER.",".DB_PASS);
  13.                 $this->_db->query ( 'SET character_set_connection = ' . SQLCHARSET . ';' );
  14.                 $this->_db->query ( 'SET character_set_client = ' . SQLCHARSET . ';' );
  15.                 $this->_db->query ( 'SET character_set_results = ' . SQLCHARSET . ';' );
  16.                 $this->_db->exec('SET NAMES utf8');
  17.  
  18.                        
  19.  
  20.         }
  21.  
  22.         private function __clone(){}
  23.  
  24.         static function getInstance(){
  25.  
  26.                 if(self::$_instance==null){
  27.  
  28.                         self::$_instance=new DbConn();
  29.  
  30.                 }
  31.  
  32.                 return self::$_instance;
  33.  
  34.         }
  35.         function selectFromDb($sql){
  36.                 $result=$this->_db->prepare($sql);
  37.                 if (!$result->execute ()){echo "Ошибка";}
  38.  
  39.                 if($result)
  40.                          return $result;
  41.                 else
  42.                          return null;
  43.         }
  44. }
12. Зверь - 15 Февраля, 2012 - 13:02:16 - перейти к сообщению
Какие ошибки? И где определяются константы DB_HOST DB_NAME DB_USER DB_PASS?
13. almair - 15 Февраля, 2012 - 13:21:53 - перейти к сообщению
ох , извиняюсь, все ок, перемудрил с запятыми

CODE (htmlphp):
скопировать код в буфер обмена
  1. PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.",".DB_USER.",".DB_PASS);
  2. надо
  3. PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME , DB_USER , DB_PASS);


Вопрос в догонку, есть возможность использовать в строке константу:

CODE (htmlphp):
скопировать код в буфер обмена
  1. define ("SLOVO","новое");
  2.  
  3. $text = "Это просто <SLOVO> для меня";


а то приходится:
CODE (htmlphp):
скопировать код в буфер обмена
  1. define ("SLOVO","новое");
  2.  
  3. $text = "Это просто".SLOVO." для меня";

 

Powered by ExBB FM 1.0 RC1