Ankündigung

Einklappen
Keine Ankündigung bisher.

__set und __get in Elternklasse definieren

Einklappen

Neue Werbung 2019

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

  • __set und __get in Elternklasse definieren

    PHP-Code:
    class Base
    {
        private 
    $_properties;

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

        public function 
    __set($index$value)
        {
            if(
    in_array($index$this->_properties)) {
                
    $this->$index $value;  // <-- Zuweisung so nicht möglich, warum nicht?
            
    }
            else {
                
    pre($index.' << is not a class variable<br>');
                return 
    false;
            }
        }
    }

    class 
    Child extends Base
    {
        private 
    $bla
        
    private $blabla;
        
        public function 
    __construct(){
            
    parent::__construct(get_object_vars($this));
        }

    Ist diese Zuweisung in der Settermethode nicht gültig?

  • #2
    PHP-Code:
    $this->$index 
    Fällt dir dabei nichts auf? >.<
    "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

    Kommentar


    • #3
      Zitat von Destruction Beitrag anzeigen
      PHP-Code:
      $this->$index 
      Fällt dir dabei nichts auf? >.<
      Nicht $this->index sondern einfach nur $index.

      Mit $this->index greifst du auf die Member/Propertys zu. Du hast hier aber nur eine einfache Variable die aus dem Input kommt.

      Kommentar


      • #4
        Zitat von Jens P. Beitrag anzeigen
        Nicht $this->index sondern einfach nur $index.

        Mit $this->index greifst du auf die Member/Propertys zu. Du hast hier aber nur eine einfache Variable die aus dem Input kommt.
        "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

        Kommentar


        • #5
          PHP-Code:
          $this->$index 
          Danke Destruction, bin zu verwirrt, als dass mir die Antwort mir ins Auge stechen würde.

          Mit dieser Zuweisung ist es zwar möglich, eine Variable zu generieren, aber nicht eine Kind-Klassenvariable zu zuweisen. $this scheint hier die Elternklasse zu sein. Eine Zuweisung der Kindvariablen mit den settern und gettern der Elternklasse ist anscheinend nicht möglich.

          Kommentar


          • #6
            Das Problem ist dass du entweder die Variable deklarieren musst oder $index setzen musst ( was in deinem Fall wohl eher nicht gewollt ist ).
            Zudem hast du ein $ zu viel

            cu
            Grüße
            Destruction
            "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

            Kommentar


            • #7
              Es sei denn du willst eine Variable der Klasse namens Index anlegen. In diesem Fall wird in der "Base" eine Variable namens "index" angelegt, als, wenn ich mich nicht irre, public Variable.

              Die Frage, ist was willst du denn überhaupt zu weisen? Und was soll da genau passieren, bzw. was erwartest du, dass passieren soll?
              "My software never has bugs, it just develops random features."
              "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

              Kommentar


              • #8
                Zudem hast du ein $ zu viel
                du meinst hier? :
                PHP-Code:
                $this->$index 
                Ich denke nicht. Ich will ja keine variable mit dem Namen index. $index beinhaltet nur den Namen der Klassenvariable.

                Edit: Paul.Schramenko ist mir zuvor gekommen.

                @Paul.Schramenko: ich will die getter und setter nur einmal in der Elternklasse definieren. Diese sollen aber die Klassenvariablen der Kindklasse zuweisen. Scheint aber nicht möglich zu sein.

                Kommentar


                • #9
                  Zitat von nuna Beitrag anzeigen
                  Mit dieser Zuweisung ist es zwar möglich, eine Variable zu generieren, aber nicht eine Kind-Klassenvariable zu zuweisen. $this scheint hier die Elternklasse zu sein. Eine Zuweisung der Kindvariablen mit den settern und gettern der Elternklasse ist anscheinend nicht möglich.
                  Poste doch bitte mal die Fehlermeldung...

                  Die Member der abgeleiteten Klasse sind private, Zugriff darauf hat nur die abgeleitete Klasse. Schätze mal, dort liegt der Hund im Pfeffer (oder so ähnlich )
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Zitat von nuna Beitrag anzeigen
                    du meinst hier? :
                    PHP-Code:
                    $this->$index 
                    Ich denke nicht. Ich will ja keine variable mit dem Namen index. $index beinhaltet nur den Namen der Klassenvariable.
                    aaaaah *g* jetzt verstehe ich was du machen willst
                    Versuch doch mal ein Array:

                    public $vars = array();

                    Mit den Werten zu füllen.

                    cu
                    Grüße
                    Destruction
                    "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                    Kommentar


                    • #11
                      Das ist es ja, es gibt keine Fehlermeldung. Du siehst einfach nichts. Es tut so, als hätte er die Variable angelegt, was es in Wirklichkeit aber nicht tut. Aber
                      Die Member der abgeleiteten Klasse sind private
                      Da scheint sich wirklich der vermeintliche Köter sich im Pfeffer zu wälzen

                      Edit:
                      Versuch doch mal ein Array:

                      public $vars = array();

                      Mit den Werten zu füllen.
                      Aber das ist ja gerade der Knackpunkt. Ich wollte explizit die private Kindmembervariablen zuweisen. Fragt sich nur, wann man wirklich drauf achten sollte, dass eine Klassenvariable als private deklariert wird. Protected scheint eventuell auch ausreichend zu sein.

                      Kommentar


                      • #12
                        Haste error_reporting mal eingeschaltet?
                        cu Grüße
                        "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                        Kommentar


                        • #13
                          ist eingeschaltet, gab trotzdem keine Fehlermeldung.

                          Kommentar


                          • #14
                            Mach mal alle Klassenvariablen auf protected und mach error_reporting(-1);
                            "My software never has bugs, it just develops random features."
                            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                            Kommentar


                            • #15
                              Zitat von Paul.Schramenko Beitrag anzeigen
                              Mach mal alle Klassenvariablen auf protected und mach error_reporting(-1);
                              OT: Was macht error_reporting(-1)? Nach dem googlen war ich auch nicht schlauer.

                              Kommentar

                              Lädt...
                              X