![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
In diesem Tutorial beschäftige ich mich ganz kurz damit, wie man seine eigenen Klassen durch Standard-Funktion erweitern kann, um Redundanzen zu vermeiden. Ich beschreibe dies anhand eines einfachen Beispiels:
Jede Klasse, die man programmiert, enthält bestimmte Konfigurationen. Nun ist es im Sinne der OOP vorteilhaft, wenn man diese Funktionalität zentral für alle Klassen zur Verfügung stellt, anstatt sie in jeder neuen Klasse manuell wieder einzupflegen. Bei Änderungen der Funktion oder Erweiterungen müsste man dann jede einzelne Klasse bearbeiten. Eins noch vorweg: Ich weiß, dass Funktionen in Klassen immer als Methoden bezeichnet werden, ich verzichte aus Gewohnheit aber im Nachfolgenden Tutorial darauf und bleibe bei der mir leider Gottes angewöhnten Art und nenne sie Funktionen, man möge mir verzeihen Als Beispiel nehme ich die Zentralisierung von Konfigurations-Variablen einer Klasse. Hierzu gibt es ein Array und eine Funktion zum Auslesen und/oder setzen von Variablen der Konfiguration. Die Klasse sieht nun wie folgt aus: PHP-Code:
Die Funktion erhält als ersten Übergabeparameter einen Variablennamen, der als Key im Array vorhanden sein muss. Ist dies nicht der Fall, wird FALSE zurückgegeben. Ist dies jedoch der Fall, wird der Wert der Variablen zurückgegeben. Der zweite Parameter ist optional und bietet die Möglichkeit nach dem Auslesen der Variablen diese neu zu setzen. Der alte Wert wird in diesem Fall zurückgegeben. Die Funktion sieht also wie folgt aus: PHP-Code:
PHP-Code:
PHP-Code:
Ein kleiner Test zeigt, dass unsere Zentralisierung geklappt hat: PHP-Code:
Will man nun den Wert von 'var1' z.B. auf 5 ändern, muss der Funktionsaufruf wie folgt aussehen: PHP-Code:
PHP-Code:
Variablen, die nicht im Config-Array enthalten sind, können mit dieser Funktion auch nicht gesetzt werden. Würden wir also folgendes versuchen: PHP-Code:
Nun haben wir eine Standard-Klasse, die es uns ermöglicht, Konfigurationsvariablen mittels Funktionsaufruf zu bearbeiten oder auszulesen. Dies ist nur ein Beispiel, wie man stetig benötigte Funktionen global halten kann. Der Vorteil liegt auf der Hand: Ändere ich etwas in der Funktion config (), brauche ich nicht alle Klassen, die diese Funktion benutzen zu ändern. Ein weiteres Beispiel wäre eine Log-Funktion, die Daten in ein Log-File schreibt oder eine Debug-Funktion, die formatierte Nachrichten am Bildschirm ausgibt. Dem Erfindungsreichtum sind hier keine Grenzen gesetzt. Ich hoffe ich konnte einen kleinen Einblick in einen kleinen Teilbereich der OOP bieten, die einem das Programmieren stark erleichtern kann, wenn man sich im Vorfeld nur genug Gedanken macht. Für Fragen zu diesem Tutorial oder bei Ungenauigkeiten oder Fehlern bitte ich sich mit mir oder einem Moderator in Verbindung zu setzen, damit dieser Fehler behoben werden kann. Jetzt solltet Ihr eigentlich in der Lage sein, das Script ohne Vorlage nachzuprogrammieren. Die verwendeten Funktionen findet Ihr alle im PHP-Manual. Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial. Danke. MfG MrNiceGuy // edit by Jann Hendrik: nach Absprache mit dem Autor eine Kleinigkeit geändert. Geändert von Jann Hendrik (27.06.2007 um 10:51 Uhr). Grund: intern-tag angepasst |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Es ist auch nur eine Kleine Einführung und erklärt nicht gänzlich OOP (schließlich gibt es ganze Bücher über dieses Thema ^^).Es sollte nur einen Teilaspekt beleuchten: Di Zentralisierung von Funktionen bzw. Methoden in Klassen. Sprich: Die Vererbung. Ich lege eine Klasse mit den Funktionen zur Verwaltung von Config-Informationen an. Dadurch, dass ich alle Klassen mit "extends class_default" erweitere, fällt dafür der Code in jeder Klasse weg, was die Klasse ansich schlanker macht und den Wartungsaufwand bedeutend verringert, da ich nurnoch an einer Stelle schauen muss, wenn ich die Funktionalität der Config-Variablen rweitern möchte (oder weitere generelle Methoden hnzufügen will, wie z.B. eine Logging-Funktion um Fhler zu protokollieren, etc.).
Welchen Teil des Tutorials hast du denn nicht so gut gefunden bzw. nicht verstanden? Dann versuche ich dies zu überarbeiten, konstruktive Kritik ist also gefragt und keine "das tutorial ist doof, weil: das tutorial ist doof"-Begründung. Sorry, aber wenn du mir nicht sagst, was man hinzufügen / abändern sollte, damit es verständlicher ist, fasse ich es als haltloses Rumgenörgel auf, da es eher destruktiv als konstruktiv wirkt... |
|
|
|
|
|
Nach oben #4 |
|
Gruppenlos
Registriert seit: 24.08.2005
Beiträge: 26
|
Die Beschreibung gibt eine WEITERE Einführung, bzw. zusätzliches Wissen im Bereich OOP an. Genau das hat der Autor wunderbar umgesetzt- find ich.
Find den Lösungsansatz wirklich sehr nett und werde das mal überdenken. Stehe selbst am Anfang von OOP und freue mich daher immer, über solche Themen und Einblicke |
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
In Anlehnung an den Tipp von WAQ habe ich den Return-Wert von FALSE auf NULL geändert, wenn der Config-Wert nicht vorhanden ist. Ansich erscheint ein NULL als Rückgabe sinnvoller, da dies auch der Rückgabewert einer nicht vorhandenen Variable wäre. Auf die Ausführung des Scriptes hat es jedoch keinen Einfluss und im Regelfall sollte der Else-Zweig eigentlich nicht auftreten, denn man weiß ja, welche Werte man setzen kann und nicht (weil man sie ja vorher in seine Klasse reinprogrammiert)
Danke nochmal an WAQ! |
|
|
|
|
|
Nach oben #6 |
|
Goldman.de
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
|
o) if a function is described to return bool, expect to get a real bool
(TRUE/FALSE) and not an int (0/1). so please code your functions and methods that way. auszug: CODING GUIDELINES FOR DEVELOPERS |
|
|
|
|
|
Nach oben #7 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
@J33d3X: Das, was du da geschrieben hast, hat irgendwie nichts mit der Klasse zu tun. Innerhalb der Funktion nutze ich === bzw. !== zur Überprüfung von Rückgabewerten und der Rückgabewrt, den meine Funktion erzeugt, hat nichts mit dem Text zu tun, den du da gepostet hast. Ich wäre dir dementsprechend sehr verbunden, wenn du mir deine Intentionen diesbezüglich mitteilen würdest.
@Michel: ich warte im Übrigen immernoch auf konstruktive Kritik deinerseits, was denn genau an dem Tutorial schlecht ist und einer Verbesserung bedarf! |
|
|
|
|
|
Nach oben #8 | |
|
Goldman.de
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
|
sorry ich wollte dich sicher nicht angreifen ( was ich denken muss nach deinem posting )
ich habe mich eher auf: Zitat:
solltest du oder waq mir eine für mich nachvollziehbare erklärung für NULL liefern lasse ich mich gerne überzeugen ( wer will schon dumm sterben ) mfg |
|
|
|
|
|
|
Nach oben #9 |
|
Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
|
Das Keyword NULL wie leere Variable und nicht die Zahl 0.
http://de.php.net/null |
|
|
|
|
|
Nach oben #11 | |
|
Benutzer
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
|
Zitat:
http://de.php.net/is_null Die ist der einzige eindeutige "Wert", um zu verdeutlichen, dass diese Klasse für den abgefragten Key eben keinen Wert besitzt. true/false sind gültige Werte. Alternative: Exception. |
|
|
|
|
|
|
Nach oben #12 |
|
Goldman.de
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
|
das ist mir ja vollkommen klar ... das muss mir auch niemand erklären
ABER: wo speziell liegt der vorteil bei einem rückgabewert NULL vs. FALSE||TRUE ausgangspunkt: normale private methode ( exeptionhandling wird über eine eigene klasse geregelt "also uninteressant in diesem fall " ) es muss doch einen Grund haben wenn jmd. sagt das es besser ist einen NULL "nicht"wert zurückzugeben als einen ins leere laufenden booleschen oder soll/muss ich das als gegeben hinnehmen *laut denk* wobei mir keine sinnvolle struktureinfällt im try-catch , welche es mir veranschaulicht warum gerade NULL als rückgabewert sinniger ist eventuell steh ich ja auch einfach nur mir selbst im weg .... nungut trotzalledem einen wunderschönen tag noch ( ... auch vom wetter her ) |
|
|
|
|
|
Nach oben #13 | |
|
Benutzer
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
|
Zitat:
Bei Exceptions kommt es nicht mehr zum Return. Was ansonsten dein Problem mit logischen Rückgaben ist, verstehe ich nicht ^^ |
|
|
|
|
|
|
Nach oben #14 | ||
|
Goldman.de
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
|
Zitat:
wenn ich ehrlich sein darf Zitat:
gut jetzt bevor ich noch kindischer werde gehe ich lieber erstmal Mittagessen lg J |
||
|
|
|
|
|
Nach oben #15 | |||
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Zitat:
Zitat:
PHP-Code:
zugegeben, dieses Probem tritt eigentlich nur dann auf, wenn man bei der Programmierung nicht aufpasst, da ich mir nicht vorstellen kann, dass ein derartiger Code absichtlich programmiert würde, aber man weiß ja nie, bei den schier unendlichen Möglichkeiten, die es gibt, kann es durchaus mal vorkommen, dass ein FALSE hier zu einem Fehler führen würde. Ich hoffe ich konnte durch mein Beispiel etwas klar machen, weshalb ein NULL sinnvoller sein könnte. Letztlich geht es eigentlich nur um eine sauberere Programmierung. Du kannst genausogut FALSE verwenden. |
|||
|
|
|
|
|
Nach oben #17 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Ich füge hier mal ein PDF-Dokument von der diesjährigen PHP Conference in Franfurt an:
Vielleicht kann es ja wer als Einstieg nutzen. |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Suche] OOP - Erklärung und Beispiele | Jan | Gesuche | 4 | 29.06.2006 11:34 |