Klassen in anderen Klassen verfügbar machen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufrufen
beste herangehensweise
code
date
einrichten
klasse
limit
message
null
nutz
objekt
ordern
page
speichern
text
vererbung
verwaltung
wichtigen stellen
zugreifen
-
Hallo,
ich setzte mich gerade mit OOP auseinander.
Jetzt habe ich eine Klasse news:
class news { var $stmt = array(); public function getAll($page, $limit_posts) { $stmt = 'SELECT id, subject, message, author_id, date FROM news ORDER BY date DESC LIMIT '.mysql_real_escape_string($limit_posts*($page-1)).', '.mysql_real_escape_string($limit_posts).''; $data_db = $db->query($stmt); $data_db = mysql_fetch_assoc($data_db); return $data_db; var_dump($data_db); } }
Die würde ich gerne so aufrufen:
error_reporting(E_ALL); session_start(); require_once('class/class.mysql.php'); require_once('config/config.inc.php'); require_once('class/class.news.php'); $text = new NEWS(); $text = $text -> getAll(5, 6);
Dabei bekomme ich die Fehlermeldung:
Notice: Undefined variable: db in D:\xampp\xampp\htdocs\rtn3\class\class.news.php on line 20
Fatal error: Call to a member function query() on a non-object in D:\xampp\xampp\htdocs\rtn3\class\class.news.php on line 20
ich weiß, dass es bedeutet, dass aus der Klasse News, nicht auf die Klasse db zugegriffen werden kann.
Achja, in der Datei config.inc.php erstelle ich ein neues OBjekt mit dem Namen db:
$db = new db($ini_array["sql_host"], $ini_array["sql_login"], $ini_array["sql_password"], $ini_array["sql_db"], $ini_array["phpversion"]);
Doch wie kann ich es jetzt so einrichten in OOP, dass meine anderen Klassen auch darauf zugreifen können, muss ich das mit Vererbung machen oder wie? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du willst $db in __construct übergeben und in private $db speichern.
Übrigens, wenn du in OOP bist, nutze statt var $stmt lieber private/protected/public $stmt;
Alternativ kannst du über $GLOBALS['db'] daraf zugreifen, wobei ich finde, dass das unsauber ist.
Beitrag zuletzt geändert: 16.1.2010 18:54:59 von nikic -
nikic schrieb:
Du willst $db in __construct übergeben und in private $db speichern.
Sorry, aber das raffe ich nicht so wirklich... -
Ich meine so:
class News { private $db; // ... public function __construct($db) { $this->db = $db; } // ... }
Das wäre die beste Herangehensweise. Du instanziierst ein News-Objekt dann über new News($db).
Alternativ setzt du $this->db = $GLOBALS['db'], was meiner Meinung nach aber unsauber ist. -
error_reporting(E_ALL); session_start(); require_once('class/class.mysql.php'); ######### config.php ######### $db = new db($ini_array["sql_host"], $ini_array["sql_login"], $ini_array["sql_password"], $ini_array["sql_db"], $ini_array["phpversion"]); ########################### ######### news.php ######### class news { private $stmt = array(); private $db = null; // hier public function getAll($page, $limit_posts) { $stmt = 'SELECT id, subject, message, author_id, date FROM news ORDER BY date DESC LIMIT '.mysql_real_escape_string($limit_posts*($page-1)).', '.mysql_real_escape_string($limit_posts).''; $data_db = $this -> db->query($stmt); // hier $data_db = mysql_fetch_assoc($data_db); return $data_db; var_dump($data_db); } public function setDB (db $pDbObj) { // hier $this -> db = $pDbObj; // hier } // hier } ########################### $text = new NEWS(); $text -> setDB ($db); // hier $text = $text -> getAll(5, 6);
Die wichtigen Stellen habe ich mit " // hier" gekennzeichnet.
Generell würde ich dir aber empfehlen ein Objekt zu erstellen, welches sich um die Verwaltung von den einzelnen Klassen, wie News, DB etc. kümmert und auch "weiß" welche Seite wie angezeigt werden soll. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage