$_GET[] einer Eigenschaft zuweisen

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

  • $_GET[] einer Eigenschaft zuweisen

    Hallo,
    ist es nicht möglich einer Eigenschaft einer Klasse einen Wert aus $_GET zu zuweisen?
    Der Code ist ziemlich sinnlos, da ich nur etwas probieren will.
    Code:
    <?php
    class hallo
    {
      private $text = $_GET['hallo'];
      public function sagHallo()
      { 
        return 'Hallo' . $this->text;
      }
    }
    
    $hallo = new hallo;
    
    echo $hallo->sagHallo();
    
    ?>
    Ich bekommen immer einen fatal error.

    Noch eine andere Frage, was bedeutet "gegen das Interface programmieren"?

    danke schonmal

  • #2
    Hallo,

    Zitat von Version2 Beitrag anzeigen
    ist es nicht möglich einer Eigenschaft einer Klasse einen Wert aus $_GET zu zuweisen?
    Doch, aber im Konstruktor oder innerhalb von Methoden, nicht bei der Initialisierung, vgl. PHP: Eigenschaften - Manual

    Zitat von Version2 Beitrag anzeigen
    Noch eine andere Frage, was bedeutet "gegen das Interface programmieren"?
    Gegen Schnittstellen (Interfaces) Programmieren &#160;Guggat emol Blog

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Danke für die Links. Diese Beschreibung hatte ich auch bei Google gefunden, kann leider nicht wirklich etwas damit anfangen.
      Hat jemand vielleicht ein konkretes Beispiel, also auch mit Code und so?

      Kommentar


      • #4
        Was willst du jetzt genau wissen? Was Interfaces überhaupt sind oder wie man gegen sie programmiert? Hast du schon mal etwas über OOP gelesen? Wenn nicht, solltest du erstmal damit anfangen.

        Man programmiert gegen ein Interface, wenn man in seiner Klasse keine anderen Klassen kennen muss und sie somit zur Laufzeit beliebig austauschbar sind. Da man trotzdem wissen muss, mit wem man es zu tun hat und ob der die Methode die man gerade anwenden will auch unterstützt, arbeitet man gegen ein Interface (d. h. man verlässt sich auf dessen deklarierte Methoden und ruft diese auf) und kann damit alle Klassen behandeln, die dieses Interface implementieren. Eine Kontrolle ob das der Fall ist, kann man mit instanceof oder Type Hinting durchführen.

        Reicht das?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5


          ich glaube das hat mir weiter geholfen! Also so etwas in der Art:
          PHP-Code:
          <?php
          interface BenutzerAnzahl
          {
            public static function 
          anzahl();
          }

          class 
          AngabeBenutzerAnzahl implements BenutzerAnzahl
          {
            private static 
          $benutzer '25';
            public static function 
          anzahl()
            {
              return 
          self::$benutzer;
            }
          }

          class 
          AusgabeBenutzerAnzahl
          {
            private 
          $objekt;
            public function 
          ausgabe()
            {
              
          $this->objekt = new AngabeBenutzerAnzahl;
              if (
          $this->objekt instanceof BenutzerAnzahl)
              {
                echo 
          $this->objekt->anzahl();
              }
            }
          }

          $a = new AusgabeBenutzerAnzahl;
          $a->ausgabe();
          ?>
          Und da kommt bei mir grad die nächste Frage auf:
          Wie kann ich feststellen, ob eine Klasse eine bestimmt Schnittstelle implementiert ohne eine Objekt diese Klasse zu erzeugen?
          Ich habe es mal so probiert, funktioniert aber anscheinend nicht^^
          PHP-Code:
          if (AngabeBenutzerAnzahl instanceof BenutzerAnzahl)
              {
                echo 
          AngabeBenutzerAnzahl::anzahl();
              }else{
                echo 
          'tschüss'

          Kommentar


          • #6
            Zitat von Version2 Beitrag anzeigen
            Und da kommt bei mir grad die nächste Frage auf:
            Wie kann ich feststellen, ob eine Klasse eine bestimmt Schnittstelle implementiert ohne eine Objekt diese Klasse zu erzeugen?
            Warum willst du das?

            Kommentar


            • #7
              Wenn ich eine statische Funktion nutzen will, muss ich ja kein Objekt erzeugen, deswegen.

              Kommentar


              • #8
                Du kannst in einem Interface keine statischen Methoden vorschreiben, also macht ein Interface bei einer statischen Klasse wenig Sinn. Statische Klassen sind generell nur sehr sparsam einzusetzen. Wenn möglich, darauf verzichten.
                Zuletzt geändert von h3ll; 21.08.2010, 17:50.

                Kommentar


                • #9
                  Wie Amica schon schrieb kannst du einen GET Parameter nicht bei der Eigenschafteninitialisierung zuweisen. Wenn du der Meinung bist die Klasse, bzw. viele abarbeitende Methoden hängen von diesem GET Parameter ab dann übergibst du das ganz einfach dem Konstruktor.

                  Kleines Beispiel.

                  PHP-Code:
                  class MyClass{

                      protected 
                  $_getParam;

                      public function 
                  __construct($_getParam){
                          
                          
                  $this->_getParam $_getParam;
                      }

                      
                  //weitere methoden in denen du auf $this->_getParam zugreifen kannst 
                  }

                  //aufruf der klasse
                  $_instanceMyClass = new MyClass($_GET['getParam']); 
                  Das ist eigentlich das was du wolltest. In dem Fall gegen ein Interface programmieren kann man geteilter Meinung sein, dass würde meiner Meinung nach erst dann Sinn machen wenn mehrere Klassen mit diesem GET Paramter arbeiten müssen, aber auch dann würde ich eher eine abstrakte Klasse schreiben die den GET Parameter speichert. Obwohl das auch wieder einen kleinen haken hat, eine abstracte Klassen kann man nur via Vererbung einsetzen bzw. nutzen weil man davon ja keine Instanz bilden kann. Und da man in PHP keine Mehrfachvererbung umsetzen kann, kann dies dann auch wieder im weiteren System Probleme aufwerfen.

                  In dem Fall sehe ich momentan den Mehrwert den ein Interface bringen soll allerdings nicht. Kann aber auch daran liegen das ich selber sowas selten bis gar nicht einsetze und mir da ein wenig die Erfahrung dait fehlt.

                  Sollte ich mit meinen Aussagen falsch liegen, dann bitte korrigiert mich.

                  Jedoch das was du mit deinen Statischen Sachen machen willst ist mir vollkommen unklar udn dazu noch Sinnfrei.

                  Gruß litter
                  Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                  http://www.lit-web.de

                  Kommentar


                  • #10
                    Man kann natürlich alles auf die Spitze treiben. Wenn man es ganz genau nimmt, müsste man aus Allem Ojekte machen (wie es zB. bei Java ist). Aber das ist bei PHP eher nicht ratsam.

                    Man kann für jede Klasse ein Interface machen. Aber das ist auch nicht wirklich empfehlenswert.

                    Meine persönliche goldene Regel: Ich mache dort ein Interface, wo es für eine Aufgabe verschiedene Klassen gibt, oder wenn welche für die Zukunft vorgesehen sind. Also angenommen man integriert ein Bezahlsystem, dann macht es Sinn dafür ein Interface anzulegen, damit mehrere verschiedene Bezahlsysteme (Paypal, Authorize.NET, Qenta, etc.) über die selben Methoden angesprochen werden können.

                    Auch kann man "Eigenschaften" als Interface darstellen. Abstraktes Beispiel:
                    PHP-Code:
                    interface BuyableInterface {}

                    class 
                    Person {
                        public 
                    $firstname;
                        public 
                    $lastname;
                    }

                    class 
                    Car implements BuyableInterface {
                        public 
                    $brand;
                        public 
                    $name;
                    }

                    class 
                    ShoppingCart {
                        protected 
                    $_cart = array();

                        public function 
                    addToCart(BuyableInterface $article) {
                            
                    $this->_cart[] = $article;
                        }
                    }

                    $person = new Person();
                    $person->firstname 'Max';
                    $person->lastname 'Mustermann';

                    $car = new Car();
                    $car->brand 'Porsche';
                    $car->name '911';

                    $shoppingCart = new ShoppingCart();
                    $shoppingCart->add($car);
                    $shoppingCart->add($person); // geht nicht, wirft Fehler 
                    Zuletzt geändert von h3ll; 21.08.2010, 20:17.

                    Kommentar


                    • #11
                      Vielen Dank für die Antworten, ich denke, dass ich es jetzt besser verstehe.

                      @litter: Ich will noch gar nichts machen, ich probiere nur das ganze etwas zu verstehen. Und will halt wissen was geht und was nicht. Ich habe bis jetzt nur Tutorials gelesen und noch nicht selber programmiert und damit will ich jetzt langsam anfangen

                      Kommentar


                      • #12
                        gegen ein Interface programmieren
                        Um die Verwirrung komplett zu machen:
                        Damit ist nicht gemeint, dass man unbedingt mit dem PHP Schlüsselwort "Interface" ein solches deklarieren muss oder sollte. Auch eine abstrakte Basisklasse kann dieser "Ideologie" entsprechen.
                        Wir werden alle sterben

                        Kommentar

                        Lädt...
                        X