Как переопределить метод db? Есть такой класс добавления заказа:require_once('Simpla.php'); class Orders extends Simpla { public function add_order($order) { $order = (object)$order; $order->url = md5(uniqid($this->config->salt, true)); $set_curr_date = ''; if(empty($order->date)) $set_curr_date = ', date=now()'; $query = $this->db->placehold("INSERT INTO __orders SET ?%$set_curr_date", $order); $this->db->query($query); $id = $this->db->insert_id(); return $id; } } Класс соединения с базой:require_once('Simpla.php'); class Database extends Simpla { public function connect() { // При повторном вызове возвращаем существующий линк if(!empty($this->link)) return $this->link;
// Иначе пытаемся подключиться if(!$this->link = mysql_connect($this->config->db_server, $this->config->db_user, $this->config->db_password)) { trigger_error("Could not connect to the database. Check the config file.", E_USER_WARNING); return false; } if(!mysql_select_db($this->config->db_name, $this->link)) { trigger_error("Could not select the database.", E_USER_WARNING); return false; }
Для того чтобы переопределить метод db в классе Orders, вы можете создать новый метод connect_db() в классе Orders, который будет использовать метод connect() из класса Database. Затем вы можете вызвать этот новый метод connect_db() в методе add_order().
Пример:
require_once('Simpla.php'); class Orders extends Simpla { public function add_order($order) { $order = (object)$order; $order->url = md5(uniqid($this->config->salt, true)); $set_curr_date = ''; if(empty($order->date)) $set_curr_date = ', date=now()'; // Переопределение метода db соединения с базой $this->connect_db(); $query = $this->db->placehold("INSERT INTO __orders SET ?%$set_curr_date", $order); $this->db->query($query); $id = $this->db->insert_id(); return $id; } public function connect_db() { // Создаем экземпляр класса Database $db_class = new Database(); // Вызываем метод connect() из класса Database $this->db = $db_class->connect(); } } class Database extends Simpla { public function connect() { // Текущий метод connect() без изменений if(!empty($this->link)) return $this->link; if(!$this->link = mysql_connect($this->config->db_server, $this->config->db_user, $this->config->db_password)) { trigger_error("Could not connect to the database. Check the config file.", E_USER_WARNING); return false; } if(!mysql_select_db($this->config->db_name, $this->link)) { trigger_error("Could not select the database.", E_USER_WARNING); return false; } if($this->config->db_charset) mysql_query('SET NAMES '.$this->config->db_charset, $this->link); if($this->config->db_sql_mode) mysql_query('SET SESSION SQL_MODE = "'.$this->config->db_sql_mode.'"', $this->link); if($this->config->timezone) mysql_query('SET SESSION time_zone = "'.$this->config->db_timezone.'"', $this->link); return $this->link; } }
Теперь при вызове метода add_order() в классе Orders будет происходить переопределение метода db для соединения с базой данных.
Для того чтобы переопределить метод db в классе Orders, вы можете создать новый метод connect_db() в классе Orders, который будет использовать метод connect() из класса Database. Затем вы можете вызвать этот новый метод connect_db() в методе add_order().
Пример:
require_once('Simpla.php');class Orders extends Simpla
{
public function add_order($order)
{
$order = (object)$order;
$order->url = md5(uniqid($this->config->salt, true));
$set_curr_date = '';
if(empty($order->date))
$set_curr_date = ', date=now()';
// Переопределение метода db соединения с базой
$this->connect_db();
$query = $this->db->placehold("INSERT INTO __orders SET ?%$set_curr_date", $order);
$this->db->query($query);
$id = $this->db->insert_id();
return $id;
}
public function connect_db()
{
// Создаем экземпляр класса Database
$db_class = new Database();
// Вызываем метод connect() из класса Database
$this->db = $db_class->connect();
}
}
class Database extends Simpla
{
public function connect()
{
// Текущий метод connect() без изменений
if(!empty($this->link))
return $this->link;
if(!$this->link = mysql_connect($this->config->db_server, $this->config->db_user, $this->config->db_password))
{
trigger_error("Could not connect to the database. Check the config file.", E_USER_WARNING);
return false;
}
if(!mysql_select_db($this->config->db_name, $this->link))
{
trigger_error("Could not select the database.", E_USER_WARNING);
return false;
}
if($this->config->db_charset)
mysql_query('SET NAMES '.$this->config->db_charset, $this->link);
if($this->config->db_sql_mode)
mysql_query('SET SESSION SQL_MODE = "'.$this->config->db_sql_mode.'"', $this->link);
if($this->config->timezone)
mysql_query('SET SESSION time_zone = "'.$this->config->db_timezone.'"', $this->link);
return $this->link;
}
}
Теперь при вызове метода add_order() в классе Orders будет происходить переопределение метода db для соединения с базой данных.