OOP логика

Ev0luti0N

Registered
Тей... Направих си класче за връзка с база данни. Та искам да си направя и query, num_rows и т.н. Тоест искам да си направя и отделни методи за заявка и т.н. Въпросът ми е следния: Какво да направя да разширя ли класа за връзката с база данни(extends) или да си направя друг клас и да си го include?
 
Направи тия функции в класа с връзката.Ползвай конструктура за връзката и слагай функциите.
Ето ти основа.

Код:
class DBAL
{
    function __construct($details)
    {
        $this->dbal_connect(mysql_connect($details..));
    }

    function query()
    {
        //
    }
}

$dbal = new DBAL(array('dbname' 'dbpasswd'..'));
$dbal->query('asdasd');
 
alex3 каза:
Направи тия функции в класа с връзката.Ползвай конструктура за връзката и слагай функциите.
Ето ти основа.

Код:
class DBAL
{
    function __construct($details)
    {
        $this->dbal_connect(mysql_connect($details..));
    }

    function query()
    {
        //
    }
}

$dbal = new DBAL(array('dbname' 'dbpasswd'..'));
$dbal->query('asdasd');
Така правя, но не ли по-добре да си съзнам отделен клас за всички фукций към mysql?
 
Аз лично предпочитам каласа за БД да си е отделно и създавам

$mysql = new MySQL();

Направил съм си отделни методи за нещата който често ги изпилзвам и един метод Query() към който подавам заявката и той ми връща резултата и вече си го обработвам.

Според мен е по добре да не го наследяваш а да го ползваш като си го създадеш в променлива ;-)
 
d3velop каза:
Аз лично предпочитам каласа за БД да си е отделно и създавам

$mysql = new MySQL();

Направил съм си отделни методи за нещата който често ги изпилзвам и един метод Query() към който подавам заявката и той ми връща резултата и вече си го обработвам.

Според мен е по добре да не го наследяваш а да го ползваш като си го създадеш в променлива ;-)
Да, но не extrends ли и класа за връзка с базата данни?
 
Ev0luti0N каза:
d3velop каза:
Аз лично предпочитам каласа за БД да си е отделно и създавам

$mysql = new MySQL();

Направил съм си отделни методи за нещата който често ги изпилзвам и един метод Query() към който подавам заявката и той ми връща резултата и вече си го обработвам.

Според мен е по добре да не го наследяваш а да го ползваш като си го създадеш в променлива ;-)
Да, но не extrends ли и класа за връзка с базата данни?

Не, доста лошо е да го разширяваш. Ако имаш 5 класа на една страница ще се върже към базата данни 5 пъти, което скапва performance.

Може да използваш singleton шаблона или Dependency Injection.

Пример:

PHP:
$mysql = new DB(..);

$other_class = new Other_Class($mysql);

и в конструктора на този Other_class си взимаш инстанцията:

PHP:
$this->db = $mysql;

и вече в целия клас може да си използваш например $this->db->query(..).
 
Karcho каза:
Ev0luti0N каза:
d3velop каза:
Аз лично предпочитам каласа за БД да си е отделно и създавам

$mysql = new MySQL();

Направил съм си отделни методи за нещата който често ги изпилзвам и един метод Query() към който подавам заявката и той ми връща резултата и вече си го обработвам.

Според мен е по добре да не го наследяваш а да го ползваш като си го създадеш в променлива ;-)
Да, но не extrends ли и класа за връзка с базата данни?

Не, доста лошо е да го разширяваш. Ако имаш 5 класа на една страница ще се върже към базата данни 5 пъти, което скапва performance.

Може да използваш singleton шаблона или Dependency Injection.

Пример:

PHP:
$mysql = new DB(..);

$other_class = new Other_Class($mysql);

и в конструктора на този Other_class си взимаш инстанцията:

PHP:
$this->db = $mysql;

и вече в целия клас може да си използваш например $this->db->query(..).
Ще го пробвам. Но няма да е днес, затова утре ще дам отговор. :?:
 
Това е тема, която е хубаво да се разгледа, и като цяло темата за ООП е много важно!Конкретно в твоя случай, за връзка с база-данни е хубаво да се ползва SINGLETON PATTERN!Лично аз го ползвам за БВ, логове и там, където преценя че не е наложително всеки път да правя инстанция на обект.
Пример:
PHP:
class Database{
	private static $instance = null;
	public static function getInstance(){
		if(!self::$instance instanceof self){
			self::$instance = new self;
		}
		return self::$instance;
	}

	private function connect($host, $user, $pass, $dbname){
		mysql_connect($host, $user, $pass) or die(mysql_error());
		mysql_select_db($dbname) or die(mysql_error());
	}
	public function myQuery($sql){
		mysql_query("SET NAMES cp1251");
		$query = mysql_query($sql) or die(mysql_error());
		return $query;
	}

....................................
}

И така.............
 

Back
Горе