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

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Blacking
мл. сержант
Сообщения: 131
Зарегистрирован: 2007-03-01 10:20:10
Откуда: Томская обл. ЗАТО Северск
Контактная информация:

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

Непрочитанное сообщение Blacking » 2012-01-26 8:28:23

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

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

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

$db = new DB();
$db->Connect();
# Работа с БД
#
#
class USER {
function CreateUser
{
# Нужно работать с БД
}
}
Нет дома на воле,
А значит и адреса нет...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

GhOsT_MZ
лейтенант
Сообщения: 662
Зарегистрирован: 2011-04-25 11:40:35
Контактная информация:

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

Непрочитанное сообщение GhOsT_MZ » 2012-01-26 9:33:52

Например:

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

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 );

Blacking
мл. сержант
Сообщения: 131
Зарегистрирован: 2007-03-01 10:20:10
Откуда: Томская обл. ЗАТО Северск
Контактная информация:

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

Непрочитанное сообщение Blacking » 2012-01-26 12:10:14

спасибо буду разбираться дальше!
Нет дома на воле,
А значит и адреса нет...

Blacking
мл. сержант
Сообщения: 131
Зарегистрирован: 2007-03-01 10:20:10
Откуда: Томская обл. ЗАТО Северск
Контактная информация:

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

Непрочитанное сообщение Blacking » 2012-01-26 12:51:46

а как например в другом методе класса 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);
Нет дома на воле,
А значит и адреса нет...


Blacking
мл. сержант
Сообщения: 131
Зарегистрирован: 2007-03-01 10:20:10
Откуда: Томская обл. ЗАТО Северск
Контактная информация:

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

Непрочитанное сообщение Blacking » 2012-01-26 16:37:04

вот результат всех вышеизложенных стараний:

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

<?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));
?>
может быть здесь можно что-то подправить/изменить, чтобы было правильнее и все такое..
Нет дома на воле,
А значит и адреса нет...