Страница 1 из 1

Объект в другом классе

Добавлено: 2012-01-26 8:28:23
Blacking
Добрый день!
Недавно начал читать про ООП и никак не могу разобраться, как передать объект одного класса в другой класс
есть класс DB и есть класс USER.
Вне класса USER создается объект класса DB и идут обращения к базе, потом доходим до работы с классом USER, а в нем нужно тоже работать с базой..

Код: Выделить всё

class DB {
public function Connect()
{
соединение с БД
}
и т.д.
}

$db = new DB();
$db->Connect();
# Работа с БД
#
#
class USER {
function CreateUser
{
# Нужно работать с БД
}
}

Re: Объект в другом классе

Добавлено: 2012-01-26 9:33:52
GhOsT_MZ
Например:

Код: Выделить всё

Class USER
{
public $dbobj = null;

....
}

$db = new DB();
$db->Connect();
$userobj = new USER();
$userobj->dbobj = $db;
Если это обязательный объект для работы класса USER, то можно в конструктор класса его передавать:

Код: Выделить всё

Class USER
{
private $dbobj = null;

public function __construct ( $dbobj )
{
$this->dbobj = $dbobj;
}
....
}

$db = new DB();
$db->Connect();
$userobj = new USER( $db );

Re: Объект в другом классе

Добавлено: 2012-01-26 12:10:14
Blacking
спасибо буду разбираться дальше!

Re: Объект в другом классе

Добавлено: 2012-01-26 12:51:46
Blacking
а как например в другом методе класса USER использовать объект $db класса DB

так у меня не получается...

Код: Выделить всё

Class USER {

 private $db = null;

 public function __construct ($db)
 {
   $this->db = $db;
 }

 public function CreateUser ($login)
 {
    $sql = "Запрос создания записи $login";
    $db->insert($sql);
    return True;
 }
}

$db = new DB();
$user = new USER ($db);
$user->CreateUser("Blacking");
вот таки ошибки получаются:
Notice: Undefined variable: db in /***/classes/user.class.php on line 14

Fatal error: Call to a member function insert() on a non-object in /***/classes/user.class.php on line 14
14 строка: $db->insert($sql);

Re: Объект в другом классе

Добавлено: 2012-01-26 12:55:06
GhOsT_MZ
$this->db->insert($sql);

Re: Объект в другом классе

Добавлено: 2012-01-26 16:37:04
Blacking
вот результат всех вышеизложенных стараний:

Код: Выделить всё

<?php
class DB {

	private $db_name;
	private $db_user;
	private $db_pass;
	private $db_host;
	private $db_charset;

	public function __construct($db_host, $db_user, $db_pass, $db_name, $db_charset)
	{
		mysql_connect($db_host, $db_user, $db_pass);
		mysql_select_db($db_name);
		mysql_query("set names " . $db_charset);
		mysql_query("set character_set_client='" . $db_charset . "'");
		mysql_query("set character_set_results='" . $db_charset . "'");
		mysql_query("set collation_connection='" . $db_charset . "_general_ci'");
		return True;
	}
	
	public function __destruct()
	{
		return mysql_close();
	}

	public function Query($sql)
	{
		$result = mysql_query($sql);
		if ($result == True)
			return $result;
	}
	
	public function Select($sql)
	{
		$res = array();
		$result = $this->Query($sql);
		if ($result == True)
		{
			while ($row = mysql_fetch_assoc($result))
			{
				$res[] = $row;
			}
			return $res;
		}
	}
}

class USER {

	private $db = null;
	
	function __construct ($db)
	{
		$this->db = $db;
	}
	
	function ViewUser($sql)
	{
		$aaa = $this->db->Select($sql);
		return $aaa;
	}
}

$db_name = "test";
$db_user = "test";
$db_pass = "test";
$db_host = "localhost";
$db_charset = "utf8";
$db = new DB($db_host, $db_user, $db_pass, $db_name, $db_charset);

$user = new USER($db);
$sql = "SELECT `login` FROM `users` ORDER BY `id` ASC LIMIT 0,5";
print_r($user->ViewUser($sql));
?>
может быть здесь можно что-то подправить/изменить, чтобы было правильнее и все такое..