Klassenübergreifender Zugruff auf Variablen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Klassenübergreifender Zugruff auf Variablen

    Hallo liebe Community,

    ich habe erst vor kurzem begonnen mich mit der OOP in PHP zu beschäftigen. Ich bin auf eure Antworten gespannt, da mir die Lösung irgenwie verwehrt bleibt.

    PHP-Code:
    class CMain() {

        var 
    Array1 = array();
        var 
    Array2 = array();

        var 
    ObjectBearbeiten = new CBearbeiten();
    // class CMain 
    PHP-Code:
    class CBearbeiten() {
        function 
    macheWasFunc1() {
            
    bearbeite Array1 aus Klasse CMain aber wie
            bearbeite Array2 aus Klasse CMain 
    aber wie
        
    // function macheWasFunc1()

        
    function macheWasFunc2() {
            
    bearbeite Array1 aus Klasse CMain aber wie
            bearbeite Array2 aus Klasse CMain 
    aber wie
        
    // function macheWasFunc2()
    // class CBearbeiten 
    So sind die Klassen gerade verteilt, oder sollen sie. Das Problem welches ich nicht lösen kann ist, dass in [color=blue]CBearbeiten::macheWasFunc[/color]X beide Variablen [color=blue]CMain::Array1[/color] und [color=blue]CMain::Array1[/color] verändert werden sollen.

    Das ganze ist -für mich- so kompliziert, weil ich eigentlich die beiden Arrays validieren und später bearbeiten möchte. Ich will validieren und bearbeiten in zwei verschiedene Funktionen auslagern, da sich die Länge und Inhalte der Arrays je nach aufgerufener Seite ändern.

    Leider sieht es dann aber so aus, dass ich an einer Stelle eine Switch-Anweisung habe, die Abfragt, welche keys zulässig sind. In einer anderern Funktion ist eine zweite Switch-Anweisung mit genau den gleichen Cases, die aber Code zum verändern der Arrays enthält.

    Ärgerlich ist jetzt die Tatsache, dass ich den Code an zwei Stellen ändern muß, wenn sich die Keys verändern (z.B. weil ich einen Rechtschreibfehler hatte.). Meine Idee war jetzt es irgenwie hinzubekommen, dass ich die Klassen habe, in denen Methoden zum Bearbeiten von Array1 und Array2 existieren.

    Grob skizziert aus:

    PHP-Code:
    switch ($key) {
        case 
    'BLA_1':
            
    validieren
            
    break;
        case 
    'BLA_2':
            
    validieren
            
    break;
        case 
    'BLA_3':
            
    validieren
            
    break;
    // switch
      
    :
      :
      :
    switch (
    $key) {
        case 
    'BLA_1':
            
    bearbeiten
            
    break;
        case 
    'BLA_2':
            
    bearbeiten
            
    break;
        case 
    'BLA_3':
            
    bearbeiten
            
    break;
    // switch 
    sollte etwas werden bei dem ich den Source nur noch an einer Stelle ändern muss. Ich hoffte das mit Klassen erledigen zu können, bei der ich von einer Abstrakten Basisklasse ableite, die beide Funktionen [color=blue]bearbeiten[/color] und [color=blue]validieren[/color] enthält. Die überschreibenden Klassen sollten dann nur noch für jeden einzelnen Key einmal geschrieben werden und irgendwie (?) an die [color=blue]CMain[/color] angefügt werden.

    Ich hoffe, ich habe es vernünftig rüber gebracht. Für Lösungvorschläge bin ich vollkommen offen, da ich leider die Lösung nicht erkenne.

    mfg
    JS
    Rather to be a mad genius than an usual idiot.

  • #2
    also wenn es dir verwehrt bleibt solltest du es auch lassen!

    aber vielleicht hilft dir "parent" weiter...

    PHP-Code:
    class A
    {
        function 
    example()
        {
            echo 
    "I am A::example() and provide basic functionality.<br>\n";
        }
    }

    class 
    extends A
    {
        function 
    example()
        {
            echo 
    "I am B::example() and provide additional functionality.<br>\n";
            
    parent::example();
        }
    }

    $b = new B;

    // Dies ruft B::example() auf, welches wiederum A::example() aufruft.
    $b->example(); 

    Kommentar


    • #3
      jo also wenn beide funktionen nacheinander ausgeführt werden dürfen geht des so
      ansonsten kannste auch mit call_user_func() arbeiten.
      da könntest du vor dem swich entscheiden welche funktion jetzt dran ist und diese dann mit call_user_func() ausm switch heraus aufrufen..

      oder ich hab dich total falsch verstanden
      Die Milch bleibt ranzig!

      Kommentar


      • #4
        call_user_func brauchst du aber nur wenn du die funktionen dynamisch aus einer variable aufrufen willst.
        wenn nicht dann schreib den funktionsnamen in den switch.

        Kommentar


        • #5
          äh jo ich dachte genau das ist ihr problem oO
          (wobei du recht hast das sie die überprüfung welche funktion es sein soll auch in jeder caseanweisung machen könnte)
          Die Milch bleibt ranzig!

          Kommentar


          • #6
            Das Problem ist das du OOP irgendwie noch nicht richtig verstanden hast.
            PHP-Code:
            var ObjectBearbeiten = new CBearbeiten(); 
            Das ist irgendwie Quatsch. Zu deinem Problem - du willst ein Array erst validieren und dann (seperat) editieren. Warum kannst du das nicht gleich in einem machen? Ansonsten ist der Ansatz call_user_func_array eine Idee.
            PHP-Code:
            function passArray $array$function ) {
               switch {
                  case 
            '...':
                     
            $array call_user_func_array $function, array ( $array ) );
                     break;
               }

            Als $function kann auch ein Array angeben werden um Klassen anzusprechen - array ( $classPointer, 'Funktion' );.
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              ich weiß zwar net warum sie call_user_func_array() brauchen soll aber des ist ja sonst genau das was ich mein
              Die Milch bleibt ranzig!

              Kommentar


              • #8
                Hi,

                danke für eure Antworten.

                ich habe mich entschieden, es jetzt so zu Programmieren

                PHP-Code:

                requiere_once 
                'Funktionen.php';

                var 
                $arPossibilities = array();
                $arPossibilities['case1'] = 'FunktionCase1';
                $arPossibilities['case2'] = 'FunktionCase2';
                  :
                  :
                if (  
                function_exists$arPossibilities[$text] )  ) {
                    
                call_user_func ($arPossibilities[$text]);
                // if 
                Danke für die Tipps, ich werde es dann daheim ausprobieren.
                Zuletzt geändert von JulietteSierra; 17.07.2007, 23:03.
                Rather to be a mad genius than an usual idiot.

                Kommentar

                Lädt...
                X