[PHP] oop wann protected/ private

Dieses Thema im Forum "Webentwicklung" wurde erstellt von encud, 8. November 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 8. November 2009
    oop wann protected/ private

    hallo

    bin gerade mal dabei mir oop anzueignen...

    jetzt meine ich gesehen zu haben, dass es besser ist die variablen in einer klasse auf protected zu setzten und dann durch eine funktion auslesen zu lassen, sprich so:

    PHP:
    <? php
    class  Beispiel  {
        protected 
    $testVariable ;

        private function 
    getTestVariable () {
            return 
    $this -> testVariable ;
        }
    }

    $test  = new  Beispiel ();
    echo 
    $test -> getTestVariable ;
    ?>
    kann mir wer sagen ob das stimmt und wenn ja für was das gut ist?!

    bzw kann mir allgemein mal wer sagen wofür dieses ganze private/protected-gesetzte soll?! hab mir den sinn davon bis jetzt noch nicht erschließen können

    gruß
     
  2. 8. November 2009
    AW: oop wann protected/ private

    Allgemein, wenn du nicht willst, dass Variablen außerhalb der Funtkion verwendet werden. zB dein MySQL Passwort, könnte ich mir vorstellen.
     
  3. 8. November 2009
    AW: oop wann protected/ private

    public = jeder darf darauf zugreifen
    protected = innerhalb einer Klasse und abgeleitet Klassen dürfen darauf zugreifen
    private = Zugriff nur innerhalb einer Klasse

    Grüße
     
  4. 8. November 2009
    AW: oop wann protected/ private

    Estorado hat die einzelnen keywords ja schon beschrieben.
    In deinem Fall oben wäre private angebracht.

    Ansonsten: Wenn du einen 'readOnly' Zugriff realisieren willst richtest du eine getter-Methode ein, aber keine setter-Methode. Das Attribut selber wird als private deklariert.

    Außerdem kannst du durch setter methoden überprüfen ob der übergebene Wert valide ist.

    PHP:
    class  MyClass
    {
       private 
    $myVar // ReadOnly
       

       
    public function  getMyVar ()
       {
          
    $this -> myVar ;
       }
    }
    Siehe auch: Zugriffsfunktion – Wikipedia
     
  5. 8. November 2009
    AW: oop wann protected/ private

    hat das ganze dann hauptsächlich was mit der sicherheit gegen hacker oder ähnlichem zu tun?
    ich meine unter php 4 konnte man das doch auch ohne diese spezifizierungen! und das password war sicher, oder nicht?
    oder soll das nur ne erleichterung für den programmierer selber sein?! wenn ja dann finde ichs unlogisch also anwendung ist mir in sofern klar, nur der sinn ist mir immer noch nicht klar gewurden...

    das beispiel von Coksnuss war aber als anwendung ganz hilfreich, danke

    bw geht sofort raus^^
     
  6. 8. November 2009
    AW: oop wann protected/ private

    Die Schlüsselwörter dienen nur der korrekten Programmierung und helfen somit dem Programmierer Du kannst ja mal nach Kapselung (im zusammenhang mit OOP natürlich) googlen. Einem potenziellen Hacker ist das vollkommen wurst was da steht, auch in Java.
     
  7. 8. November 2009
    AW: oop wann protected/ private

    nein das hat nix mit sicherheit zu tun. wenn du mysql-zugangsdaten als public properties abspeicherst kommen "hacker" auch ned einfacher dran.

    das ganze public/protected/private konzept hat viel mehr mit modularer programmierung zu tun.

    public: zugriff von überall
    protected: zugriff in abgeleiteten klassen
    private: zugriff nur in der definierenden klasse
     
  8. 8. November 2009
    AW: oop wann protected/ private

    hmm ok, also ist das nur als hilfe für den programmierer zu sehen....

    ich hab hier ein beispiel für nen user-login, ein teil davon ist diese klasse:
    PHP:
    class  User  {
        protected 
    $id ;
        protected 
    $name ;
        protected 
    $password ;
        
        public function 
    __construct ( $id $name $pw ) {
            
    $this -> id  $id ;
            
    $this -> name  $name ;
            
    $this -> password  $pw ;
        }
        
        public function 
    getId () {
            return 
    $this -> id ;
        }
        
        public function 
    getName () {
            return 
    $this -> name ;
        }
        
        public function 
    getPassword () {
            return 
    $this -> password ;
        }
    }
    für mich persönlich wäre es logischer, die 3 variablen auf public zu setzten und die get-funktionen einfach wegzulassen, wäre doch viel weniger code! wo ist da der vorteil wenn ich es so mache wie in dem beispiel? (ist aus nem buch welches angibt von profies geschrieben zu sein, deshalb glaube ich einfach mal das da schon ein sinn hinter steckt, den ich nur noch nicht begreife^^)
     
  9. 8. November 2009
    AW: oop wann protected/ private

    ich bin auch manchmal faul, dann lös ich das einfach so:

    PHP:
    class  User  {
        protected 
    $uid ;
        protected 
    $uname ;
        protected 
    $upassword ;
        
        public function 
    __construct ( $id $name $pw ) {
            
    $this -> uid  $id ;
            
    $this -> uname  $name ;
            
    $this -> upassword  $pw ;
        }
        
        public function 
    __get ( $n )
        {
            switch(
    $n ) {
                case 
    'id'
                    return 
    $this -> uid ;
                case 
    'name'
                    return 
    $this -> uname ;
                case 
    'password'
                    return 
    $this -> upassword ;
            }

            throw new 
    Exception ( 'undefined property "'  $n  '" in class '  get_class ( $this ));
        }
    }
    dann hast du readonly variablen nach außen über normalen property-access

    im grunde musst du dir halt vorher immer überlegen ob du variablen außerhalb der klasse brauchst, wenn ja: sollen sie auch geändert werden können?

    dann kannst entscheiden ob du nen getter oder direkt zugriff auf die variablen implementierst.
     
  10. 8. November 2009
    AW: oop wann protected/ private

    also gibt es keine großen vor- oder nachteile, auf welche art ich variablen oder funktionen auch immer einbinde, hauptsache es funktioniert am schluss?!^^
    und damit ich die übersicht behalte setzte ich die variablen und funktionen immer schön ordnungsgemäß, wie ich sie auch verwende?
    hab ich das jetzt richtig verstanden?
     
  11. 9. November 2009
    AW: oop wann protected/ private

    Ja, so hast du es im Prinzip richtig verstanden. Der ganze Sinn dahinter ist sauberer Code, der vom Programmierer immer gut benutzt werden kann. Stell dir einfach vor, dass du nicht nur für dich entwickelst, sondern auch andere mit deinen Klassen arbeiten müssten. Da wäre es dann schön, wenn diese nicht lange deinen Code studieren müssten, sondern direkt an den Get- und Set-Methoden erkennen, welche Attribute sie setzen können und welche sie nicht zu interessieren hat. Genauso geht es natürlich dir, wenn du die Klassen oder ganze Frameworks von anderen Codern einsetzen willst. Klarheit und Übersichtlichkeit, damit man den Code möglichst unkompliziert nutzen kann, sind das Ziel.
     
  12. 9. November 2009
    AW: oop wann protected/ private

    ok, super, dann weiß ich beischeid danke für die hilfe

    gruß encud
     
  13. 10. November 2009
    Zuletzt von einem Moderator bearbeitet: 13. April 2017
    AW: oop wann protected/ private

    badloader möchte zum thema auch noch was loswerden:

    Manche Dinge wurden schon angesprochen, aber hier noch mal konkrete beispiele für getter und setter:

    Sicher nicht super sinnvoll, aber verständlich hoffe ich.
    PHP:
    class  User  {
       private 
    $username ;
       private 
    $password ;

       
    // kein setter oder getter, da das nicht geändert werden soll/muss
       
    private  $mysql  = array( 'localhost' 'username' 'pass' );

       
    // ist der username okay? -> dann setzen
       
    public function  setUsername ( $username ) {
           if (
    $this -> usernameTest ( $username ) ===  false ) {
              return 
    false ;
           }
           
    $this -> username  $username ;
       }

       
    // wir wollen kein ä im usernamen bei der ausgabe wegen codierung.
       // gleichzeitig soll aber die db mit ä sein.
       // vorteil: ich replace nur ein mal und nicht bei jedem gebrauch.
       // wenn ich doch nicht mehr ersetzen will, nehme ich das einfach nur hier raus
       // und es ist überall geändert
       
    public function  getUsername () {
           return 
    str_replace ( 'ä' 'ae' $username );
       }

       
    // user dürfen nur namen mit mindestens 10 zeichen haben
       
    protected function  usernameTest ( $username ) {
           if (
    strlen ( $username ) >  10 ) {
              return 
    true ;
           }
           return 
    false ;
       }
    }

    class 
    Admin  extends  User  {

        
    // admins dürfen auch nur 5 buchstaben haben
        
    protected  usernameTest ( $username ) {
           if (
    strlen ( $username ) >  5 ) {
              return 
    true ;
           }
           return 
    false ;
        }
    }
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.