OOP - Problem mit Vererbung

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kropff
    replied
    ich würde trotzdem hier nicht mit statischen eigenschaften arbeiten, sondern so:
    PHP Code:
    class System
    {
      protected 
    $S_MYSQL_HOST;
      protected 
    $S_MYSQL_USER;
      protected 
    $S_MYSQL_PASSWORD;
      protected 
    $S_MYSQL_DB
      private   
    $file;
      protected function 
    __construct($file
      {
        
    $this -> file //... usw.
      
    }
    }

    class 
    MySql extends System 
    {
      public function 
    __construct ($file)
      {
        
    parent::__construct ($file);
        echo 
    $this -> S_MYSQL_USER;
      }
    }

    $myslq = new MySQL(); 
    trotzdem halte ich die vorgehensweise nicht für optimal. imho gehören die db-zugangsdaten ausschließlich in die mysql-klasse. und sollten vom typ private sein.

    peter
    EDIT:
    außerdem solltest du dir mal autoload ansehen
    Last edited by Kropff; 31-05-2009, 15:03.

    Leave a comment:


  • andygyr
    replied
    Vielen Dank!

    Das mit Static wusste ich, allerdings nicht, dass man sie Variable dann auch in der 'eigenen' Klasse noch mit self:: ansprechen muss. Klappt wunderbar!

    Leave a comment:


  • Kropff
    replied
    Dann kann ich doch mit parent::Vriable auf eine Variable der Übergeordneten Klasse zugreifen!
    nur wenn sie vom typ static ist.
    PHP Code:
    class A
    {
      protected static 
    $blubb;
      protected function 
    __construct ($bla)
      {
        
    self::$blubb $bla;
      }
    }

    class 
    extends A
    {
      public function 
    __construct ($bla)
      {
        
    parent::__construct ($bla);
      }
      
      public function 
    getBla()
      {
        echo 
    parent::$blubb
      }
    }

    $a = new ('bluber');
    $a -> getBla(); 
    peter

    Leave a comment:


  • andygyr
    replied
    Dann kann ich doch mit parent::Vriable auf eine Variable der Übergeordneten Klasse zugreifen!

    Danke für den Tipp!

    Leave a comment:


  • Kropff
    replied
    Gibts keine andere möglichkeit, wie ich von einer Klasse die Variabeln der anderen Klasse nutzen kann?
    eine möglich sähe z.b. so aus:
    PHP Code:
    class A
    {
      protected 
    $blubb;
      protected function 
    __construct ($bla)
      {
        
    $this -> blubb $bla;
      }
    }

    class 
    extends A
    {
      public function 
    __construct ($bla)
      {
        
    parent::__construct ($bla);
      }
      
      public function 
    getBla()
      {
        return 
    $this -> blubb
      }
    }

    $a = new ('bluber');
    echo 
    $a -> getBla(); 
    peter

    Leave a comment:


  • PHP-Desaster
    replied
    Für das Bereitstellen von Objekten gibt es verschiedene Design Pattern, zum Beispiel Singleton oder Registry. Oder du übergibst dem Mysql-Objekt eine Instanz der System-Klasse. Wie du es auch machst, so wie jetzt geht es auf jeden Fall nicht

    Leave a comment:


  • andygyr
    replied
    Gibts keine andere möglichkeit, wie ich von einer Klasse die Variabeln der anderen Klasse nutzen kann?

    Die MySQL Klasse die ich verwende habe ich selbst geschrieben..

    Leave a comment:


  • h3ll
    replied
    Originally posted by andygyr View Post
    Wenn man jetzt mal nur den Ablauf anschaut würde das ca. so aussehen:
    PHP Code:
    error_reporting(E_ALL);
    require_once(
    'system/class.system.php');
    $sys = new System;     // System Starten
    $sys->LoadConfigFile('config.php');     // MySQL Config laden
    $sys->LoadSystemDrivers(); // Systemtreiber laden
    $myslq = new MySQL();
    $mysql->Start(); 
    Wobei die Klasse MySQL mit der funktion Start auf die Variabeln der Klasse System zugreift, welche in der Funktion LoadConfigFile gesetzt wurden.
    Dann musst du aber $sys an das Objekt $mysql übergeben.

    Warum verwendest du übrigens nicht die bereits fertig mysqli-Klasse statt dem veralteten mysql-Mist?

    Leave a comment:


  • andygyr
    replied
    Wenn man jetzt mal nur den Ablauf anschaut würde das ca. so aussehen:
    PHP Code:
    error_reporting(E_ALL);
    require_once(
    'system/class.system.php');
    $sys = new System;     // System Starten
    $sys->LoadConfigFile('config.php');     // MySQL Config laden
    $sys->LoadSystemDrivers(); // Systemtreiber laden
    $myslq = new MySQL();
    $mysql->Start(); 
    Wobei die Klasse MySQL mit der funktion Start auf die Variabeln der Klasse System zugreift, welche in der Funktion LoadConfigFile gesetzt wurden.

    Leave a comment:


  • Hopka
    replied
    Originally posted by andygyr View Post
    Mein Skript läuft nun folgendermassen ab:
    Die Grundklasse wird gestartet. Mit einer Funktion werden 4 Variabeln der Grundklasse beschrieben.
    Ich Starte eine andere Klasse (welche eine Vererbung der Grundklasse hat) Und will in einer Funktion auf die Variabeln, die davor in der Grundklasse gespeichert wurden zugreifen. Aber var_dump() gibt mir ein NULL.
    Das klingt jetzt nicht unbedingt so als ob du Objektorientierung verstanden hättest.

    Man "startet" keine Klassen und man speichert auch keine Variablen in Klassen.

    Man erzeugt Objekte einer Klasse. Und wenn du in einem solchen Objekt dann Variablen befüllst und anschließend ein Objekt einer Unterklasse erzeugst, dann hat das natürlich keine Ahnung von dem anderen Objekt.

    Leave a comment:


  • andygyr
    replied
    Extends ist bei der Klasse dran. Also 'extends Grundklasse' ..

    __destruct() wird doch per unset() aufgerufen? Oder hab ich mich da flasch informiert?

    Leave a comment:


  • Kropff
    replied
    ich hoffe, du hast extends nicht vergessen. und warum killst du das objekt mit unset($sys);? dafür gibt __destruct.

    peter

    Leave a comment:


  • andygyr
    replied
    Also mein Skript, wo ich die Klassen aufrufe sieht ca. so aus:
    PHP Code:
    error_reporting(E_ALL);
    require_once(
    'system/class.system.php');
    $sys = new System;     // System Starten
    $sys->LoadConfigFile('config.php');     // MySQL Config laden
    $sys->LoadSystemDrivers(); // Systemtreiber laden

    unset($sys);     // System beenden 
    LoadConfigFile()
    Hier wird die Konfigurationsdatei geladen und die Variabeln werden zugeordet.

    LoadSystemDrivers()
    Hier werden die restlichen Klassen geladen und gestartet.

    Alle Variabeln, die ich in der Funktion LoadConfigFile() gesetzt habe, beinhalten dort die NULL.
    Die anderen Variabeln, welche ich schon bei der deklaration gesetzt habe haben den Korekten wert und nicht NULL.
    Last edited by andygyr; 31-05-2009, 12:18.

    Leave a comment:


  • ApoY2k
    replied
    Rufst du in der zweiten Klassen denn überhaupt erstmal diese Funktion auf, in der die Variablen beschrieben werden?!

    Ist vielleicht ne dämliche Frage, aber oft sinds ja die einfachen Sachen die man nicht selbst sieht ;D

    Ansonsten: Wird nur diese Variable als NULL angezeigt oder auch alle anderes?

    Leave a comment:


  • andygyr
    started a topic OOP - Problem mit Vererbung

    OOP - Problem mit Vererbung

    Hallo zusammen..

    Ich möchte mehrere Klassen miteinander vererben. Da man in PHP einer Klasse nur eine Klasse vererben kann hab ich eine 'Grundklasse' gemacht. Alle Klassen vererbe ich nun diese 'Grundklasse'.

    Mein Skript läuft nun folgendermassen ab:
    Die Grundklasse wird gestartet. Mit einer Funktion werden 4 Variabeln der Grundklasse beschrieben.
    Ich Starte eine andere Klasse (welche eine Vererbung der Grundklasse hat) Und will in einer Funktion auf die Variabeln, die davor in der Grundklasse gespeichert wurden zugreifen. Aber var_dump() gibt mir ein NULL.

    In der Grundklasse werden die Variabeln so festgelegt und beschrieben:
    PHP Code:
    public $S_MYSQL_HOST;
    public 
    $S_MYSQL_USER;
    public 
    $S_MYSQL_PASSWORD;
    public 
    $S_MYSQL_DB;
    // ...
    function LoadConfigFile($file) {
        if(!
    file_exists($this->S_CONFIG_PATH.$file)) return false;
        include(
    $this->S_CONFIG_PATH.$file);
        echo 
    $this->S_MYSQL_HOST $mysql_host;
        echo 
    $this->S_MYSQL_USER $mysql_user;
        echo 
    $this->S_MYSQL_PASSWORD $mysql_password;
        echo 
    $this->S_MYSQL_DB $mysql_db;

    Die echo Befehle Dienen nur zu Testzwecken! Und diese Echo's geben auch den richtigen Inhalt aus!

    In der Anderen Klasse greife ich so auf die Variabeln von der Grundklasse zu:
    PHP Code:
    function Start() {
        
    var_dump($this->S_MYSQL_DB);
        if (
    $this->connect mysql_connect($this->S_MYSQL_HOST$this->S_MYSQL_USER$this->S_MYSQL_PASSWORD)) {
            return 
    true;
        } else return 
    false;
            
    /**
             * Error: Verbindung konnte nicht hergestellt werden.
             */

    Auch hier dient var_dump() nur zu Testzwecken. Allerdings wird hier NULL ausgegeben!

    Meine Frage: Wiso wird NULL ausgegeben, wenn ich die Variabeln doch vorher gespeichert habe?
Working...
X