ООП, ламерский вопрос :)

bobo

Новичок
Доброе утро, есть несколько вопросов к вам)

Играюсь с ООП.
Класс соединения с БД:

PHP:
class Connect {
	
	public function dbConnect() {
		
		@$mysqli = new MySQLi(DB_LOCATION,DB_USER,DB_PASS,DB_NAME);
		
			if (mysqli_connect_errno()) {
				
				echo "Ошибка при соединении с Базой Данных: ".mysqli_connect_error();
				exit;
				
			}
		
		$mysqli -> query("SET NAMES cp1251");
		$mysqli -> query("SET CHARACTER SET cp1251");
		$mysqli -> query("SET COLLATION_CONNECTION='cp1251_general_ci'");

		echo "connect<br>";

		return $mysqli;
		
	}
	
	public function dbClose() {

		echo "close<br>";

		self::dbConnect() -> close();
		
		return TRUE;
		
	}
	
}


Мой класс:

PHP:
class Test {

	
	
	
	public function __construct() {
		
		$this -> db = Connect::dbConnect();
		
	}
	
	
	
	public function test() {
		
		$queryObjId = $this -> db -> query("QUERY");
		$array = $queryObjId -> fetch_assoc();
		
		return $array['id'];
		
	}



	public function __destruct() {
		
		Connect::dbClose();
		
	}



}
1. Как передать идентификатор коннекта обычной переменной, что то вроде

PHP:
	public function __construct() {
		
		$this -> db = Connect::dbConnect();
		$this -> db = $db;
		
	}
что б в дальнейшем можно было писать $query = $db -> query(" ... ");

2. При выполнении, т.е.

PHP:
		$test = new Test;
		echo $test -> test();
браузер выдает

Почему после закрытия соединения он опять его открывает то ??
Заранее благодарю!
 

bobo

Новичок
По второму вопросу отбой, помогите с первым плз)
 

Sufir

Я не волшебник, я только учусь
PHP:
// как-то так

public function __construct() {
        
        $db = Connect::dbConnect();
        $query = $db -> query(" ... ");
        
}

// или

$db = null;

public function db( &$h ) {
        
        $h = Connect::dbConnect();
        
}

db( $db );
$query = $db -> query(" ... ");

// или

public function db() {
        
        return Connect::dbConnect();
        
}

$db = db();
$query = $db -> query(" ... ");

// или что ты имеешь в виду?
 

bobo

Новичок
Имею в виду следущее: в классе может быть несколько функций, в функции несколько запросов к БД, и что б в каждом запросе не писать "$this -> db -> query(...)" хотелось бы писать более коротко "$db -> query(...)" :) Т.е. сделать что-то типа "$this -> db = $db;" в том же конструкторе. Незнаю, как еще объяснить..)
 

Sufir

Я не волшебник, я только учусь
Лучше бы тебе этого не хотелось, мне кажется. Но можно попробовать воспользоваться global "в том же конструкторе". И ООП тут уже ни при чем.
 

bobo

Новичок
Т.е. проще писать "$this -> db -> query(...)" ? Вопросов нет, просто упростить немного хотелось)
 

Redjik

Джедай-мастер
PHP:
$mysqli->set_charset("cp1251")
чтобы ескейпить хорошо


ЗЫ. это к тому, что нужно добавить

ЗЫЫ. а по поводу открытия нескольких соединений - сделай одиночкой

ЗЫЫЫ. и кстати это тоже =)))

Не используй эту кодировку в вебе. Для веба есть utf-8.
 
Сверху