tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
155
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Hallo ihr da,

    ich bin gerade mal wieder an einem Punkt, an dem mich mein bisheriges Wissen nicht weiter bringt. Das Problem ist folgendes: ich definiere in einer Methode bestimmte Variablen ($a, $b, $c, ...) und möchte auf diese dann außerhalb der Methode zugreifen, aber nicht mit globalen Variablen oder return arbeiten.

    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    class Test {
        public function definiere() {
            $a = 123;
            $b = new Object(true);
            $c = 'Ich bin eine Zeichenkette.';
        }
     
        public function variablen() {
            $this->definiere();
            $vars = zauberfunktion();
            print_r($vars); # => array('a' => 123, 'b' => Object { ... }, 'c' => 'Ich bin eine Zeichenkette.')
        }
    }

    Kennt jemand von euch eine solche "Zauberfunktion" oder eine Möglichkeit, wie man eine solche erzeugen könnte? Es gibt dafür ja compact(), aber leider muss man bei dieser Funktion die Namen der Variablen angeben, welche ich nicht kenne, und sie funktioniert nicht außerhalb des Gültigkeitsbereiches der Methode.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    das wird wohl nichts werden.
    Diese Variablen sind so nur innerhalb der Funktion sichtbar, ohne sie zumindest zurückzugeben oder in einen anderen Geltungsbereich zu überführen, kommt man da nicht ran.

    Möglich wäre bspw. soetwas in der Art:
    PHP-Code:
    <?php

    class Test {
        
        function 
    definiere() 
        {
            
    $a 123;
            
    $b = new StdClass;
            
    $c 'Ich bin eine Zeichenkette.';
            
            if(
    func_num_args() && func_get_arg(0))
            {
              return 
    get_defined_vars();
            }
        }

        function 
    zauberfunktion($method)
        {
          return 
    $this->$method(true);
        }
        
        function 
    variablen() 
        { 
          
    $vars$this->zauberfunktion('definiere');
          
    print_r($vars); 
        }
    }

    $obj=new Test();
    $obj->variablen();
    ?>
     

  3. #3
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Man könnte evtl was über Reflection oder get_object_vars() bzw. get_class_vars() machen. Reflection ist jedenfalls das magischste, was man da anwenden kann. Problem ist an der Stelle nur, die Klassen-Properties müssen in der Klassen-Definition vorhanden sein.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  4. #4
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Das ist schade, dass es, wie du meinst, nicht anders funktionieren kann. Ich persönlich finde, dass es doch irgendwo eine Möglichkeit geben wird, auf die bisher noch niemand gekommen ist und werde deswegen mal weiter suchen. Falls also noch jemand eine Idee hat, dann kann er sie mir nennen.

    Was mir auch weiterhelfen könnte, wenn jemand in PHP eine Möglichkeit kennt an das Ende einer Methode ein Stück Quellcode anzuhängen, was dann ausgeführt wird. Oder es kennt noch jemand einen komplett anderen Ansatz für mein Problem:

    Ich versuche momentan eine PHP-Umsetzung des ActionControllers von Ruby on Rails zu erstellen. Bei diesem dient der Klassenname (+ "Controller") als Hauptseite und die jeweiligen Methoden dieser Klasse als "Actions", welche dann so aufgerufen werden:

    www.meineseite.de/test/index => Controller: test, Action: index

    Um dann die entsprechenden Werte einer Methode in das Template zu überführen, müsste ich also die Variablen im Destruktor aufrufen können, um sie dann entsprechend im Template einzusetzen.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  5. #5
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Zitat Zitat von einfach nur crack Beitrag anzeigen
    Ich versuche momentan eine PHP-Umsetzung des ActionControllers von Ruby on Rails zu erstellen. Bei diesem dient der Klassenname (+ "Controller") als Hauptseite und die jeweiligen Methoden dieser Klasse als "Actions", welche dann so aufgerufen werden:

    www.meineseite.de/test/index => Controller: test, Action: index
    Genauso machen es die meisten heutigen Frameworks. Wie z.B. Zend: http://framework.zend.com/manual/en/...e-project.html

    Schau dir doch an, wie es dort gemacht wird.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  6. #6
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Das Prinzip mit der Containerklasse habe ich auch schon in der näheren Auswahl gehabt, allerdings gefiel mir das nur auf den zweiten Blick. Ich werde mich mal mit den Reflectionklassen auseinandersetzen und wenn das nicht fruchtet, dann werde ich eben all meine Variablen mit $this->view->{$var} festlegen. Ich danke euch beiden.

    Thema ist vorerst geschlossen.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

Ähnliche Themen

  1. Bean-Variablen als Parameter einer Methode einer anderen Bean
    Von mcdroemmel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 25.06.09, 17:53
  2. Antworten: 2
    Letzter Beitrag: 06.06.07, 18:37
  3. Text aus einer Variablen auslesen...
    Von coReDaRk im Forum PHP
    Antworten: 4
    Letzter Beitrag: 29.05.05, 18:02
  4. Alle Variablen einer Funktion auslesen
    Von time-master im Forum PHP
    Antworten: 2
    Letzter Beitrag: 10.03.05, 12:38
  5. Variablen auslesen von einer TXT Datei
    Von WabbaJack im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 26.05.04, 16:36