Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PDO: static vai "normaali" yhteys

Ripe [01.11.2012 09:54:21]

#

Terve!

Kumpi on parempi tapa toteuttaa pdo-yhteys: staattinen vai "normaali" yhteys, onko mitään esim. nopeuseroja?
Esimerkki:

class Controller extends PDO {
	private $model;
	public function __construct(){
		try {
			$this->model = new Model("mysql:host=localhost;dbname=tietokanta", "kayttaja", "salasana");
		} catch (PDOException $e) {
			die("VIRHE: " . $e->getMessage());
		}
	}
}

Vai:

class Controller extends PDO {
	static $model;
	public function __construct(){
		try {
			self::$model = new Model("mysql:host=localhost;dbname=tietokanta", "kayttaja", "salasana");
		} catch (PDOException $e) {
			die("VIRHE: " . $e->getMessage());
		}
	}
}

Metabolix [01.11.2012 12:42:47]

#

Molemmat esimerkkisi ovat väärin, koska luokka periytyy PDO-luokasta ja sen ei siis kuulu sisältää enää erikseen PDO-oliota $model-muuttujassa, vaan luokka on jo itsessään PDO-olio ja sen kuuluu luoda yhteys kutsumalla metodia parent::__construct.

Edellisen lisäksi tietokantaluokan nimeäminen sanalla Controller tuntuu väärältä, joten en todellakaan tiedä, mitä edes yrität kysyä. Voin silti vastata, että staattiset muuttujat ovat lähes aina ideologisesti väärä ratkaisu eikä muuttujan sijoittelu aiheuta mitään merkitsevää nopeuseroa. Tietenkään ei pidä silti luoda useaa tietokantayhteyttä, vaan oikea ratkaisu on luoda yksi tietokantayhteys ja välittää se parametrina niille luokille tai funktioille, jotka sitä tarvitsevat.

Ripe [01.11.2012 13:08:05]

#

Tajusin itsekin kysymykseni tyhmyyden.
Teen tuota projektia mvc-tyyliin putkan oppaan mukaan. Controller-luokan $model-muuttuja on Model-luokan instanssi. Tuo extends PDO tuli vahingossa tuonne, sillä oikeasti sitä ei koodissa ole. Mutta kiitos ohjeesta yhteyden muodostamiseen.

qeijo [01.11.2012 15:19:26]

#

"Controller-luokan $model-muuttuja on Model-luokan instanssi."

Onko Arin takamus hellin vai Hellin takamus arin?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta