И всё прочее, что касается 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
{
# Нужно работать с БД
}
}
Нет дома на воле,
А значит и адреса нет...
Blacking
-
Хостинг HostFood.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
-
Контактная информация:
Непрочитанное сообщение
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 );
GhOsT_MZ
-
Blacking
- мл. сержант
- Сообщения: 131
- Зарегистрирован: 2007-03-01 10:20:10
- Откуда: Томская обл. ЗАТО Северск
-
Контактная информация:
Непрочитанное сообщение
Blacking » 2012-01-26 12:10:14
спасибо буду разбираться дальше!
Нет дома на воле,
А значит и адреса нет...
Blacking
-
Blacking
- мл. сержант
- Сообщения: 131
- Зарегистрирован: 2007-03-01 10:20:10
- Откуда: Томская обл. ЗАТО Северск
-
Контактная информация:
Непрочитанное сообщение
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
-
Blacking
- мл. сержант
- Сообщения: 131
- Зарегистрирован: 2007-03-01 10:20:10
- Откуда: Томская обл. ЗАТО Северск
-
Контактная информация:
Непрочитанное сообщение
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));
?>
может быть здесь можно что-то подправить/изменить, чтобы было правильнее и все такое..
Нет дома на воле,
А значит и адреса нет...
Blacking