kostenloser Webspace werbefrei: lima-city


Klassen in anderen Klassen verfügbar machen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n********r

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    n********r

    nikic schrieb:
    Du willst $db in __construct übergeben und in private $db speichern.


    Sorry, aber das raffe ich nicht so wirklich...
  5. 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.
  6. 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.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!