Mike: Variable in Klasse ändern

Hi,

Ich möchte eine Klasse erstellen mit der ich Nachrichtenfenster erzeigen kann.
Dafür benötige ich verschiedene Werte. Es gibt die Standardwerte und mann sollte diese auch ändern können.

  
class _message {  
  $height = "auto";  
  $width = "500px";  
  $title = "Hallo";  
  $text = "Hallo Fenster";  
  //usw  
  
  function erzeuge_Fenster(){  
    echo($height $width $title $text); //zum Test werden nur die Variablen ausgegeben  
  }  
  
}  
  
$x = new _message();  
$x->erzeuge_Fenster();  
  

Wie ist es möglich die Variablen zu ändern bevor ich die Funktion erzeuge_Fenster() aufrufe?
Ist es möglich es so zu realisieren dass man zB
$x.width('300px');
$x.title('Hallo');
schreibt?

Ein Problem ist auch noch dass die Variablen in der Funktion erzeuge_Fenster nicht bekannt sind. Muss man hier mit globals arbeiten?

danke für eure Hilfe

mfg Mike

  1. Hello,

    Ich möchte eine Klasse erstellen mit der ich Nachrichtenfenster erzeigen kann.
    Dafür benötige ich verschiedene Werte. Es gibt die Standardwerte und mann sollte diese auch ändern können.

    class _message {
      $height = "auto";
      $width = "500px";
      $title = "Hallo";
      $text = "Hallo Fenster";
      //usw

    function erzeuge_Fenster(){
        echo($height $width $title $text); //zum Test werden nur die Variablen ausgegeben
      }

    }

    $x = new _message();
    $x->erzeuge_Fenster();

    
    >   
    > Wie ist es möglich die Variablen zu ändern bevor ich die Funktion erzeuge\_Fenster() aufrufe?  
      
    Du kennst die Doku? <http://www.php.net/manual/en/language.oop5.php>  
    Du weißt, was ein Konstruktor ist?  
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
  2. Hi!

    Wie ist es möglich die Variablen zu ändern bevor ich die Funktion erzeuge_Fenster() aufrufe?
    Ist es möglich es so zu realisieren dass man zB
    $x.width('300px');
    $x.title('Hallo');

    Der Punkt(.) hat in PHP eine andere Bedeutung als in C++ oder Java - er dient der string concatenation.

    Natürlich kannst Du der Klasse Methoden zum Setzen von Eigenschaften hinzufügen:

      
      
    class _message  
    {  
     protected $width;  
     public function setWidth($w)  
     {  
        $this->width = $w;  
     }  
      // Rest  
    }  
    $x = new _message();  
    $x->setWidth('300px');  
    
    

    Oder evtl. die Eigenschaften direkt ändern, falls die Visibility dieser Eigenschaften das erlaubt/erlauben soll:

      
    class _message  
    {  
      public $width;  
       // Rest  
      
    }  
    $x = new _message();  
    $x->width = '300px';  
    
    

    Ein Problem ist auch noch dass die Variablen in der Funktion erzeuge_Fenster nicht bekannt sind. Muss man hier mit globals arbeiten?

    Übergib die Variablen bei der Instanziierung, nutze also den Konstruktor wie Tom es bereits riet, wenn Du ein Objekt mit diesen Eigenschaften direkt benötigst.

    Hierbei gäbe es dann viele Möglichkeiten, z.B:

      
    // Dies ist nur ein Beispiel - es gibt zahlreiche andere Möglichkeiten.  
    // Ich verwende hier exemplarisch ein Array, weil ich davon ausgehe, dass  
    // die Anzahl der zu übergebenen Eigenschaften variabel ist  
    // Insbesondere sollte *hier* die Gültigkeit der übergebenen Werte und Array-Keys geprüft werden  
      
    <?php  
    class _message  
    {  
      protected $_property = array(); // CSS-Eigenschaften hier drin  
      public function __construct($prop)  
      {  
         $this->_property = $prop;  
      }  
      // Rest  
    }  
      
    $x = new _message(array('width'=>'300px', 'height'=>'auto', 'title'=>'Hallo', 'text'=>'Hallo Fenster'));  
    // Schau das Objekt an:  
    echo '<pre>'.[link:http://www.php.net/manual/de/function.var-export.php@title=var_export]($x, true).'</pre>';  
    
    

    BTW: Dein Code sieht nach PHP 4 aus, auch wenn er weiterhin so in PHP 5 verwendbar wäre. Ist das Absicht?

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. class _message
      {
      protected $width;
      public function setWidth($w)
      {
          $this->width = $w;
      }
        // Rest
      }
      $x = new _message();
      $x->setWidth('300px');

      »»  
        
      So habe ich es auch schon probiert aber mann muss hier ja für jeden Wert eine Funktion schreiben.  
      So funktioniert es irgendwie nicht:  
      ~~~php
        
      function _set($name,$value){  
        $this->$name=$value;  
      }  
        
      $x->_set('height','100px');  
      
      

      BTW: Dein Code sieht nach PHP 4 aus, auch wenn er weiterhin so in PHP 5 verwendbar wäre. Ist das Absicht?

      Welcher Teil des Codes sieht nach PHP4 aus? Absicht is es nicht ;)

      danke mfg Mike

      1. Hi,

        So funktioniert es irgendwie nicht:

        function _set($name,$value){
          $this->$name=$value;
        }

        $x->_set('height','100px');

          
        Abgesehen davon, dass „funktioniert nicht“ als Problembeschreibung nicht funktioniert, „funktioniert“ es so durchaus - dieser Code in den von Peter eingefügt, anschließende Kontrollausgabe des Objektes $x per var\_dump ergibt:  
          
        ~~~php
        object(_message)#1 (2) {  
          ["width":protected]=>  
          string(5) "300px"  
          ["height"]=>  
          string(5) "100px"  
        }
        

        BTW: Dein Code sieht nach PHP 4 aus, auch wenn er weiterhin so in PHP 5 verwendbar wäre. Ist das Absicht?

        Welcher Teil des Codes sieht nach PHP4 aus?

        Zum Beispiel, dass du dich um Sichtbarkeiten kein Bisschen kümmerst, sieht nach PHP 4 aus.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Hi!

        So habe ich es auch schon probiert aber mann muss hier ja für jeden Wert eine Funktion schreiben.

        Nein, du musst nur die absoluten Basics im Umgang mit Objekten lernen.

        BTW: Dein Code sieht nach PHP 4 aus, auch wenn er weiterhin so in PHP 5 verwendbar wäre. Ist das Absicht?
        Welcher Teil des Codes sieht nach PHP4 aus? Absicht is es nicht ;)

        Er ist überhaupt kein gültiger Code, denn Eigenschaften wurden weder in PHP 4 noch werden sie es in PHP 5 einfach so in die Klassendeklaration geschrieben. Da fehlt das Schlüsselwort var oder eine Angabe zur Sichtbarkeit.

        Lo!

        1. Hi!

          Er ist überhaupt kein gültiger Code, denn Eigenschaften wurden weder in PHP 4 noch werden sie es in PHP 5 einfach so in die Klassendeklaration geschrieben. Da fehlt das Schlüsselwort var oder eine Angabe zur Sichtbarkeit.

          Stimmt auffallend.

          off:PP

          --
          "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
      3. Hi!

        So habe ich es auch schon probiert aber mann muss hier ja für jeden Wert eine Funktion schreiben.

        Nein - deshalb ja das Array. Das ist ein erster Schritt, um (später) 'PHP-Magie' und Überladung in PHP nutzen zu können, aber das scheint mir hier zu früh.

        So funktioniert es irgendwie nicht:

        function _set($name,$value){
          $this->$name=$value;
        }

        $x->_set('height','100px');

          
        Was funktioniert nicht? Wolltest Du \_\_set() und \_\_get nutzen (zwei! führende Underscores)? Dann lies bitte das Kapitel zur Überladung vollständig. Auf php.net gibt es auch immer nützliche "User Contributed Notes" am Ende der Dokumente.  
          
        
        > > BTW: Dein Code sieht nach PHP 4 aus, auch wenn er weiterhin so in PHP 5 verwendbar wäre. Ist das Absicht?  
        > >   
        > Welcher Teil des Codes sieht nach PHP4 aus? Absicht is es nicht ;)  
          
        Die Antwort hast Du bereits - der Hinweis auf die Sichtbarkeit (Visibility) wurde Dir nun dreimal gegeben und zweimal verlinkt. Du brauchst ein paar Basics - dann wird es viel einfacher, als wenn Du hier nur rätst/probierst - versprochen!  
          
        BTW: die geposteten Links dienen nicht nur der farblichen Gestalung des Forums;-)  
          
        off:PP  
          
          
        
        -- 
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)