Объектно-ориентированное программирование

Статус
Закрыто для дальнейших ответов.

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Решил сделать с помощью OOП свой классы базы данных(подключение,выборка,удаление,упдейт)

Выборка у меня уже получилась, а вот вопрос с подключением к БД никак не могу решить.
У меня есть 2 файла
mysql_connect.php - вызов функций
Там пока ничего почти нету
Код:
<?
include "class/db_mysql.php";
$db = new db_mysql();
$db->mysql_connect();

?>
и в папке class находится файл
db_mysql.php - описание классов

Код:
<?
class db_mysql
{
var 
var $obj = array (
				"sql_user"		 => "sport"	   ,
				"sql_pass"		 => "alex007"	 ,
				"sql_host"		 => "localhost"   ,
				"sql_bdname"		 => "sport"	 ,
		 );

var $connect = '';

	function mysql_connect()
	{
		$this->connect = @mysql_connect($this->obj['sql_host'], $this->obj['sql_user'], $this->obj['sql_pass']);
		if (!$this->connect)
		{
			echo 'mysql Error';
			exit();
		}
		if (!mysql_select_db($this->obj['sql_bdname'],$this->connect))
		{
			echo 'mysql Error connect. Can\'t faind table with this name';
			exit();
		}


	}

}

?>
Так вот если все объекты писать через $this, то при попытке подключения выводится ошибка
Fatal error: Cannot redeclare class db_mysql in k:\home\localhost\www\myrab\sportingnews\class\db_mysql.php
В строке, где идёт определение класса class db_mysql

Если исправить где-нибудь $this на $db, то выводит mysql Error, что означает, не может подконектиться к базе данных, а через обычный скрипт всё идёт, всё подгружается(без ооп). Кстати вписал такую строку в код скрипта, распечатку передаваемых мною данных, всё выводится. А не подключается.
echo $this->obj['sql_host']." ".$this->obj['sql_user']." ".$this->obj['sql_pass'];
выведет localhost sport alex007
В чём ошибка работы скрипта, скажите пожайлуста!
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Где-то уже существует класс с именем db_mysql. Выберите другое имя классу.

Код:
class db_mysql
{
var
var $obj = array
Что это за var var?
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Я уже менял название класса на другие, но ничего не изменялось.
Насчёт var var Это опечатка при написании темы, не знаю откуда взялась, у меня её нет!
 

Apple

New Member
Регистрация
16.05.2007
Сообщения
7
function mysql_connect();
Не запутаешься ?
Такая функция уже есть, объяви её как статическую:

static function mysql_connect();

И обращайся как db_mysql::mysql_connect();
но ошибка не в этом - непонятно в чём.
 

Alterbit

Well-Known Member
Регистрация
10.05.2005
Сообщения
78
лучше сделать синглтон
Код:
 class DB {
	private $_instance;

//------------------------------------------------------------------------------
	protected function __construct(){
		$this->Connect(...);
	}
//------------------------------------------------------------------------------
	protected function Connect($db_host, $db_user, $db_pass, $db_name) {

		//тут коннектимся к БД
	}

//------------------------------------------------------------------------------
	public static function getInstance(){

		if(self::$_instance === null){
			self::$_instance = new self();
		}
		return self::$_instance;
	}
//------------------------------------------------------------------------------
...
}
и вызывать объект в нужном месте программы вот так:
Код:
 $db = DB::getInstance();
при этом объект базы будет всего один и подключение к БД будет происходить автоматом


а файл с классом нужно инклудить с помощью include_once,
ошибка "Cannot redeclare class db_mysql" видимо из-за того что файл 2 раза подключается или этот класс уже существует
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Alterbit там скорее всего пхп4.

Стилистика ужасная.
Код:
echo 'mysql Error connect. Can\'t faind table with this name';
			exit();
можно записать:
Код:
exit('mysql Error connect. Can\'t faind table with this name');
зачем хранить переменные подключения как массив? лучше как свойства, т.к. поменять\вызвать свойство проще, чем вызывать переменную массива.
подключение файлов:
Код:
include_once("{$_SERVER['DOCUMENT_ROOT']}/function/mysql.php");
или если внутри директории то:
Код:
include_once(dirname(_FILE_)."/mysql.php");
 
Статус
Закрыто для дальнейших ответов.
Верх Низ