Variablen aus einer Methode auslesen

Parantatatam

mag Cookies & Kekse
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.

PHP:
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.
 
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:
<?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();
?>
 
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:

http://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 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/learning.quickstart.create-project.html

Schau dir doch an, wie es dort gemacht wird.
 
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.
 
Zurück