tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
294
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    solar22 solar22 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    24
    Hallo,
    ich hab mal eine Frage zu OOP.
    Ich möchte ein Script schreiben (einfach zum lernen), welches eine Variable in einer Klasse ändert und dann die Klasse ausführt und die Variable ausgibt.
    (Ich verzichte hier absichtlich auf die Verwendung von Parametern [außer auf einen].)

    Dazu muss man sagen, das die Klasse "MyClass()" die Verwaltungsklasse für alle anderen Klassen ist. Es wird also ein wenig rekursiv

    Soweit bin ich schon:
    datei1.php:
    PHP-Code:
    $class = new MyClass("TestClass");
    $class->getParam("foo=bar");
    $content $p=getContent(); 
    MyClass() relevanter Ausschnitt, wo der Fehler sein könnte:
    PHP-Code:
      public function getParam($param) {

        
    $p explode("=",$param);    

        
    $name $p[0];

        
    $this->pClass->$name=$p[1];
        
    //$this->pClass wird im __constructor mit "TestClass" belegt, oben in datei1.php wird dieser Parameter als einziger übergeben.
      

    Und nun die TestClass():

    PHP-Code:
    <?php
    class TestClass {

        public 
    $foo;  //ist definiert, um zu ändern

        
    function __constructor() {
        }
            
        function 
    run() {
            return 
    "foo: ".$this->foo;
        }

    }
    Wenn ich mal testweise ein paar echos an relevanten Stellen einbaue, um zu sehen, was das Script so übergibt schreibt er folgendes:
    Code :
    1
    2
    3
    
    TestClass initialisiert...
    Parameter: TestClass -- foo=bar
    Hole Content von TestClass

    Doch als Ausgabe kommt nur:
    Code :
    1
    
    foo:

    Mir kommt es also so vor, als würde der Wert nicht richtig gesetzt, denn er liest die Variable nicht aus, tu ich jedoch in der Funktion getParam() ein echo $this->pClass->$name dann erscheint der gewünschte Inhalt "bar".

    Ich weiß nicht, wo der Fehler stecken könnte, könnt Ihr mir helfen?

    Danke im vorraus!

    Gruß.
    solar22
     
    Gruß.
    solar22

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Hab mal versucht dein Ding nachzubauen. Bei mir funktioniert es

    PHP-Code:
    <?php

    class TestClass {
        public 
    $foo;  //ist definiert, um zu ändern
        
    public function run() {
            return 
    "foo: ".$this->foo;
        }

    }

    class 
    MyClass {
        public function 
    __construct($className){
            
    $this->pClass = new $className;
        }
        
        public function 
    getParam($param) {
            
    $p explode("=",$param);    
            
    $name $p[0];
            
    $this->pClass->$name=$p[1];
        }      
    }

    $class = new MyClass('TestClass');
    $class->getParam("foo=bar");
    echo 
    $class->pClass->run();  
    ?>
    Ach, anstelle von __constructor() solltest du __construct() verwenden, damit du einen Konstrukteur haben willst
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Also ich weiß ja nicht, aber wären hier nicht __set() und __get() perfekt für geeignet?
    Wenn ich es richtig verstanden habe?
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  4. #4
    solar22 solar22 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    24
    @yaslaw:
    Dein Beispielcode hat mir meinen Fehler gezeigt.
    Ich hab in meiner MyClass einen Fehler gehabt, das er leider die Klasse neu definiert und somit die Erstzung des Parameters ignoriert
    Jetzt gehts.
    So leicht passieren Fehler

    Danke dir!
     
    Gruß.
    solar22

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 29.09.06, 22:45
  2. Antworten: 0
    Letzter Beitrag: 07.06.05, 20:43
  3. Antworten: 0
    Letzter Beitrag: 14.02.05, 19:31
  4. Antworten: 1
    Letzter Beitrag: 05.06.02, 13:00
  5. Antworten: 5
    Letzter Beitrag: 07.04.02, 20:12

Stichworte