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