closed
Goto Top

Überladen von Methoden in PHP möglich?

Hi,

ich suche einen Weg zum Überladen von Methoden in PHP. Damit ist nicht die __call()-Methode gemeint, sondern ein Weg die standardmäßig definierten Methoden zu überschreiben.

Beispiel: standardmäßig wird file_get_contents($file) mit einem Parameter aufgerufen. Ist es möglich diese zu überschreiben, so dass die Funktion den gleichen Namen hat, aber zwei Parameter entgegennimmt? --> file_get_contents($file, $param2)

Ich brauche dies für eine Überprüfung auf gesetzte Rechte VOR dem eigentlichen Aufruf der Funktion.

Danke

Content-ID: 175145

Url: https://administrator.de/contentid/175145

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

msr972
msr972 23.10.2011 um 17:22:44 Uhr
Goto Top
Nein, es geht nur das Magic __call
msr972
msr972 23.10.2011 um 19:14:36 Uhr
Goto Top
Noch ein kleiner Tipp, bau Dir doch nen Wrapper drum herum, das ist am einfachsten und ist vorallem anpassbarer...
Beispiel:

function w_fgc($file, $params = null) {
    if( $params === null ) {
        // normaler Aufruf von fgc ohne Rechteüberprüfung oder Parameter usw...
        // oder gleich return;
    } else if ( is_array($params)) {
        if( isset( $params['hasRight'] === true ) ) {  
            // hier z.B. zusätzliche Validierung ob hasRights sein kann und so weiter
            // + dein fgc
        } else {
            // hier irgendwas anstellen lassen z.b. Protokollierung für Verstoß usw.
            return;
        }
    }
};

Das wäre jetzt der QnD Way wie ich es auf die Schnelle machen würde ohne OOP...
Closed
Closed 23.10.2011 um 19:19:53 Uhr
Goto Top
das sieht eigentlich schon gar nicht schlecht aus. ich habe halt nach etwas gesucht, mit dem ich es vermeide alle funktionen neu zu schreiben und diese jedesmal extra zu definieren. aber wenn ich den methodenname als parameter übergebe, ist das ein ziemlich guter weg, etwas durchzusetzen.

vielen dank schonmal
EvilMoe
EvilMoe 23.10.2011 um 21:35:56 Uhr
Goto Top
In den Editoren gibt es nicht umsonst eine "Suchen und ersetzen" Funktion ;)
Closed
Closed 23.10.2011 um 22:09:08 Uhr
Goto Top
Das ist nicht ansatzweise das, worum es geht...
msr972
msr972 24.10.2011 um 09:39:25 Uhr
Goto Top
Zitat von @Closed:
das sieht eigentlich schon gar nicht schlecht aus. ich habe halt nach etwas gesucht, mit dem ich es vermeide alle funktionen neu
zu schreiben und diese jedesmal extra zu definieren. aber wenn ich den methodenname als parameter übergebe, ist das ein
ziemlich guter weg, etwas durchzusetzen.

vielen dank schonmal

Hmm... Ich glaube zu verstehen, was Du vor hast, sprich eine Function schreiben ala:
function wrapper_function( functionname, $paramsForFunctionname ) {
    // Body
}

Würde ich Dir persönlich nicht raten, da Du ja wieder in der Function switch'n/if'n müsstest, da Du ja dann z.B. file_get_content, file, file_set_content usw hättest, wo Du ja einen "Subbody" bräuchtest.
Ich würde tatsächlich für jeden Sonderfall einen Wrapper schreiben. So wie in meinem obigen Beispiel wie es ja nur für den fgc Fall wäre.
Wenn Du (warum auch immer) einen generellen Wrapper benutzt und da z.B. 30 Sonderfälle drin hast, könnte das auf die Performance der Skriptlaufzeit gehen, was wiederum kontraproduktiv wäre.

Ist das ganze denn eigentlich OOP oder prozeduraler Stil?
Closed
Closed 24.10.2011 um 18:58:31 Uhr
Goto Top
derzeit plane ich es als OOP, da ich damit wesentlich flexibler bin.
es wäre halt wirklich genial, wenn die user sich nciht umgewöhnen müssten und das framework mit den "standardfunktionsaufrufen" verwenden könnten. das ginge aber erstens nur prozedural und zweitens bräuchte ich die rechte auch irgendwie als übergabeparameter, was schon wieder dazu führen würde, dass die funktion verändert wird. somit fällt das sicherlich raus.

ich wollte mir noch aspect oriented programming anschauen. hab aber noch gar keine ahnung in welche richtung das geht. bei einem groben überfliegen sah es eventuell hilfreich aus