Setter/Getter in PHP 5.1 - verwendet IHR diese?

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

  • Setter/Getter in PHP 5.1 - verwendet IHR diese?

    Hallo,

    mich würde interessieren wie ihr Setter/Getter Methoden in PHP 5.1 in euren Code implementiert bzw. ob ihr überhaupt Variablen schützt um die OOP Kapselung zu gewährleisten? Seit PHP 5 und __set/__get sind ja Konstruktionen wie die folgende möglich:

    PHP-Code:

    <?php

    class User
    {
        private 
    $values;
        
        public function 
    __construct()
        {
            
    $this->values = array(
                
    "name" => "",
                
    "email" => "",
                
    "pwd" => ""
            
    );
        }

        public function 
    __get$key )
        {        
            if( 
    array_key_exists$key$this->values ) )
            {
                return 
    $this->values[$key];
            }
            die( 
    "Can't access that property!\n" );
        }

        public function 
    __set$key$value )
        {
            if( 
    array_key_exists$key$this->values ) )
            {
                
    $this->values[$key] = $value;
            }
            else
            {
                die( 
    "You can't set that property!\n" );
            }
        }
    }

    $user = new User();
    $user->name "Markus";
    echo 
    $user->name;
    ?>
    Diese Methode hat Nachteile. Zum Einen sind __set/__get keine wirklichen property Handler zum Anderen ist es nicht mehr möglich die Variablen auf normale Art und Weise mit individuellen Eigenschaften, also private, protected und public zu deklarieren. PHPDoc hält von dieser Methode auch wenig . Auch mit der Überladung von __call sieht es nicht besser aus.

    Neben der oben genannten Methode gibt es auch die Möglichkeit über Reflection oder Methodensuche die entsprechenden Accessor Methoden, ähnlich wie in C# oder Java, zu finden.

    Beispiel:

    PHP-Code:
        function __set($property$value)
        {
            
    $method 'set'.$property;
            if (!
    method_exists($this$method))
                throw new 
    Exception("$property setter is not defined");

            
    $this->$method($value);
        }

        function 
    __get($property)
        {
            
    $method 'get'.$property;
            if (!
    method_exists($this$method))
                throw new 
    Exception("$property getter is not defined");

            return 
    $this->$method();
        } 
    Nachteil ist die Performanceeinbuße und eventuelly Probleme bei der Vererbung.

    Summa Summarum verfügt PHP 5 nicht über echte Property Accessoren. Bei den Codes handelt es sich nur um Workarounds.

    MfG

  • #2
    Moin,

    Membervariablen sind immer private zu setzen!

    Gruß Thomas

    Kommentar


    • #3
      Nö nutze ich nicht.
      Seh da auch keinen Grund für.
      Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

      Kommentar


      • #4
        ich schreib getter und setter noch selber und das schon unter PHP 4
        ist zwar arbeit, aber dann recht schnell erweiterbar und es entspricht der Idee von OO

        Kommentar


        • #5
          Ich habe meine S/G-Methoden auch noch selber geschrieben, und diese jetzt mit einer universalen Lösung ersetzt.

          Kommentar

          Lädt...
          X