Aktuelle Zeit: Fr 29. Mär 2024, 15:48



Neues Thema erstellenAntwort schreiben Seite 1 von 1   [ 2 Beiträge ]
Autor Nachricht
BeitragVerfasst: Fr 23. Mär 2012, 13:53 
Benutzeravatar

Registriert: Fr 8. Jul 2011, 13:30
Beiträge: 347
Wohnort: https://www.accountkiller.com/removal-requested
Ein Thema für sich... ich werd euch nicht lang langweilen, nicht alles bis ins Detail erklären, das überlass ich dem hier: http://www.peterkropff.de/site/php/oop_einfuehrung.htm

Ich geh rein mal auf die wichtigsten Dinge ein und starte gleich etwas "fortgeschrittener", aber für Anfänger kompakt zusammengefasst...

Erst mal der Main-Namespace... bei Linux wär dieser '/', also so gesehen 'root', das Wurzelverzeichnis. Kann man zwar weglassen, aber ich nehms immer dazu.
#1 = Einbindung der Klassen ist auch einfach. Ich gehe hier vom Unterordner './classes/' aus, in welchem sich die Datei 'uebung.php' befindet.
#2 = Die Instanziierung der Klasse 'uebungsklasse' im Namespace 'uebungsspace'. So zu arbeiten ist praktisch, wenn man innerhalb einer Schleife z.B. verschiedenste Prozesse abarbeitet, wo alle Klassen den selben Namen besitzen (z.B. 'bearbeite'), jedoch für verschiedene Prozesse verschiedene Abläufe benötigt werden - man nimmt einfach den Namen des anderen Namespace und muss sich nur um die gleiche Namensgebung innerhalb dieser Klasse kümmern. Sorgt auch für mehr Übersicht, als wenn man jetzt die einzelnen Klassen 'bearbeite_txt', 'bearbeite_pdf' oder sonstwie nennt.
#3 = Zugriff auf eine öffentliche Funktion innerhalb der Klasse
#4 = Zugriff auf eine öffentliche Variable innerhalb der Klasse
Code:
<?php
namespace
{
   /* codeteil */
   require_once('./classes/uebung.php'); #1
   $test = new \uebungsspace\uebungsklasse; #2
   $test -> testfunktion('123', '456'); #3
   $test -> zahl; #4
}
?>


Kommen wir jetzt zur Datei ./classes/uebung.php...
#1 = es reicht 'class uebungsklasse', aber ich habe hier gleich 2 weiterführende Themen eingebracht:
- final heißt es ist die finale Klasse - von ihr können keine weiteren Kindklassen abgeleitet werden, dazu später jedoch mehr
- extends gibt eine parent-klasse an - zum Bleistift eine für mehrere Klassen gültige Hauptklasse. Klasse Mensch extends Saeugetiere...
#2 = Initialisierung einer innerhalb der Klasse verfügbaren Variable. Zuweisung von Werten sollte erst innerhalb von Funktionen geschehen...
- public: Es kann öffentlich (außerhalb der Klasse) darauf zugegriffen werden, wie im vorhergegangenen Beispiel
- protected: Nur innerhalb dieser und den Kindklassen kann darauf zugegriffen werden
- private: Nur innerhalb dieser Klasse kann darauf zugegriffen werden - interne Funktionen usw., die außerhalb nicht direkt benötigt werden
#3 = normale Funktion, ebenso public/protected/private deklarierbar
#4 = Zugriff auf die Parentklasse - auf member (variablen, funktionen, etc.) kann man entweder per parent::variable bzw. parent::funktion zugreifen, oder ganz einfach per $this -> funktion(), da die Kindklasse das ganze Zeugs ja geerbt hat. Das :: heißt übrigens paamayim nekudotayim und das wiederum heißt doppel-doppelpunkt... ^_^
#5 = Zugriff auf die Variable innerhalb der Klasse mittels $this -> zahl (auch möglich mit this::zahl)
Code:
<?php
namespace uebungsspace
{
   final class uebungsklasse extends \main\hauptdatei #1
   {
      
      public $zahl; #2
      public function testfunktion($testvariable); #3
      {
         parent::parentfunktion($blabla); #4
         $this -> zahl = $testvariable; #5
      }
   }
}
?>


Noch schnell ein Beispiel für die Elternklasse:
Code:
<?php
namespace main
{
   class hauptdatei #1
   {
      protected $parentvariable;
      protected function parentfunktion($bla);
      {
         /* Irgend ein Code, der ausgeführt werden soll */
         $this -> parentvariable = 1;
      }
   }
}
?>


So, grad viel Stress gehabt - mich freut coden heute nicht mehr... ich hoff mal, dass es zumindest halbwegs verständlich war und ich keine Fehler eingebaut hab... hab den Code jetzt nicht getestet und war jetzt n paar Stunden im Stress, mir reichts für heute... xD

_________________
https://www.accountkiller.com/removal-requested

Бороться и победить в борьбе против мониторинга!
Kjempe og vinne kamp mot overvåkning!
Pugnare et pugna vincere versus circumdare custodiere!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
Verfasst: Fr 23. Mär 2012, 13:53 


Nach oben
  
 
BeitragVerfasst: Fr 23. Mär 2012, 20:39 
Benutzeravatar

Registriert: So 29. Jan 2012, 10:40
Beiträge: 5
Vielleicht auch noch ganz interessant:

mit dem Schlüsselwort abstract (vor class) definiert man eine Abstrakte Klasse. Diese kann nicht instanziiert werden. Sie kann (muss aber nicht) abstrakte Methoden definieren - diese abstrakten Methoden sind vergleichbar mit einem Interface.

Vererbung sollte nur dann verwendet werden, wenn tatsächlich eine Vater-Kind-Beziehug vorliegt - ansonsten Objekt-Komposition.
Die Vater-Klasse deklariert man am Besten als abstrakte Klasse. Beispiel:

Code:
<?php
abstract class abstractDatabaseDriver {
    public $con = null;   

    abstract public function connect();

    abstract public function disconnect();

    abstract public function query();   

    protected function getSqlFileContent($file) {
        return file_get_contents($file);
    }
}


Die Methoden connect, disconnect und query wurden mit dem abstract Schlüsselwort versehen - nun verhält sich das wie bei einem Interface - eine Kindklasse muss nun diese drei Methoden definieren, ansonsten erzeugt der PHP-Interpreter einen FatalError.

Beispiel für Kind-Klasse:
Code:
<?php
class MySQLDriver extends abstractDatabaseDriver {
    public function connect() {
        $this->con = mysql_connect('localhost', '', '');
    }

    public function disconnect() {
        mysql_close($this->con);
    }

    public function query($sqlCode, $sqlFile = '') {
        if (!empty($sqlFile)) {
            return mysql_query($this->getSqlFileContent($sqlFile));
        }
        return mysql_query($sqlCode);
    }
}


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Neues Thema erstellenAntwort schreiben Seite 1 von 1   [ 2 Beiträge ]


Wer ist online?

0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron


Powered by phpBB® Forum Software © phpBB Group


Bei iphpbb3.com bekommen Sie ein kostenloses Forum mit vielen tollen Extras
Forum kostenlos einrichten - Hot Topics - Tags
Beliebteste Themen: Erde, Österreich, Wien, USA, NES

Impressum | Datenschutz