ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
1832
1832
EMPFEHLEN
-
26.04.06 11:28 #1
Hallo Leute,
heute hab ich ausnahmsweise mal ein größeres Problem. Es geht um den Gültigkeitsbereich von Funktionen innerhalb von Funktionen. Gibt es eine Möglichkeit eine Funktion, die innerhalb einer anderen Funktion deklariert wurde auch nur dort gültig zu machen und nicht außerhalb der ersten Funktion?
Das Problem ist folgendes:
Ich habe eine Klasse, in der gibt es eine Funktion, die eine weitere Funktion deklariert, die nur dort verfügbar sein soll. Beispiel:
Wenn ich nun eine erste Instanz von A erstelle, wird die funktion bar() beim aufruf von foo() initialisiert. Rufe ich nun foo() noch einmal auf oder erstelle eine neue Instanz von A und rufe dort foo() auf, geht das nicht, da bar() bereits deklariert wurde.PHP-Code:class A {
function foo () {
function bar () {
// ...
}
// Die Funktion bar() soll nur innerhalb dieser foo() existieren und nicht global.
}
}
Gibt es dort eine Möglichkeit?
-
Kurze Frage: Warum?
Wenn Du eine Funktion hast die nur in einer einzigen Funktion genutzt werden soll, dann nutz sie doch einfach nur in dieser Funktion und in keiner anderen. Dann brauchst Du Dir nicht den Kopf zerbrechen wie Du sowas anstellen sollst.
Wenn Du verhindern willst, dass eine Funktion von ausserhalb des Objektes mittels $mein_object->meine_function() ansprechbar ist musst Du mit PHP5 und dem dort eingefuehrten Schluesselwort private arbeiten.PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
26.04.06 11:51 #3Das ist an sich richtig. Ich erklär es nochmal genauer. Innerhalb der Funktion foo() soll man auf bar() zugreifen können. bar() stellt dabei eine Wrapper-Methode auf die Klassenmethode do() dar. Ich möchte damit verhindern, dass innerhalb der Funktion foo() mit $this->do() hantiert werden muss, sondern einfach bar() aufgerufen wird, die dann $this->do() aufruft. Das ganze soll passieren, weil Laien Code in der Funktion foo() reinschreiben können ohne, dass Sie $this benutzen müssen.
Zitat von Dennis Wronka
PHP-Code:class A {
function do () {
// Bearbeitet irgendwas und gibt was zurück
}
function foo () {
function bar () {
return $this->do ();
}
// Der Benutzer soll hier nicht mit $this->do() arbeiten, sonder mit bar(), die dann im Hintergrund $this->do() aufruft.
}
}
-
Kurze Antwort: Kannst du vergessen. Wenn es eine Klassenfunktion ist, musst du immer mit $this arbeiten.
Gruß fanste
Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )
Problem gelöst? Dann markiere das Thema bitte als erledigt!
Beachte bitte die Netiquette. Insbesondere Punkt 15.
-
26.04.06 14:35 #5Das vermute ich auch. Dann muss ich mir was anderes ausdenken irgendwie. Wenn ich dazu eine Lösung finden sollte, poste ich sie hier. Ich würde das Thema damit erstmal als erledigt markieren, aber wenn noch einer ne Idee hat, immer her damit.
Zitat von fanste
-
26.04.06 15:18 #6
Kleiner Nachtrag:
Ich habe jetzt eine Lösung gefunden. Sie ist zwar nicht mehr wirklich an OOP angelehnt, aber funktioniert in meinem Vorhaben trotzdem. Ich habe global im Script z.B. eine Variable $a festgelegt. Im Constructor der Klasse globalisiere ich diese mit global $a und weise dann $a eine Referenz auf die Klasse zu. Die Funktion bar() habe ich dann außerhalb der Klasse platziert. In dieser Funktion binde ich wieder $a mit global $a ein und da diese die Referenz auf die aktuelle Klasse hält, kann ich von dort auf $a->do() zugreifen. Die Funktion bar() kann ich aber innerhalb von foo() aufrufen.
Das ganze funktioniert bei mir aber nur weil sichergestellt ist, dass alle Klassen nacheinander initialisiert werden und auch die Funktion foo() nur einmal aufgerufen wird. Damit ist sichergestellt, dass $a immer die gerade zu bearbeitende Klasse enthält.
-
Könntest du das mal mit einem Codebeispiel zeigen? Ich komm da jetz grad nicht mit
Gruß fanste
Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )
Problem gelöst? Dann markiere das Thema bitte als erledigt!
Beachte bitte die Netiquette. Insbesondere Punkt 15.
-
26.04.06 21:32 #8
- Registriert seit
- Apr 2004
- Beiträge
- 183
Das dürfte es auch tun:
PHP-Code:class A {
function foo () {
if (!function_exists('bar') {
function bar () {
// ...
}
}
// Die Funktion bar() soll nur innerhalb dieser foo() existieren und nicht global.
}
}
Pendergast? Relic, Reliquary, Cabinet of Curiosities, Still Life with Crows, Brimstone, Dance of Death
Now in bookstores: The Book of the Dead
Ähnliche Themen
-
Struct innerhalb einer Funktionen
Von Bismark im Forum C/C++Antworten: 5Letzter Beitrag: 23.06.08, 21:12 -
mathematische Funktionen in C++ (integegrieren, ableiten, Funktionen aufstellen...)
Von busenbach im Forum C/C++Antworten: 2Letzter Beitrag: 04.09.07, 07:19 -
Mit SWT Win API Funktionen / Funktionen aus beliebigen DLLs aufrufen.
Von Thomas Darimont im Forum JavaAntworten: 9Letzter Beitrag: 10.05.05, 22:03 -
Problem mit Funktionen
Von sub im Forum Borland CBuilder und VCLAntworten: 4Letzter Beitrag: 11.06.04, 00:43 -
Daten aus include innerhalb von Funktionen
Von noisy im Forum PHPAntworten: 1Letzter Beitrag: 06.10.03, 15:40





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren