2009-08-01 9 views
1

Nur eine Idee:setters/Getter in einem Verfahren

Beispiel (in PHP): Namen einzustellen: $ object-> Namen ('Name'); , um den Namen zu erhalten: $ object-> name();

Wenn kein Argument: Die Methode wird als Getter verwendet, sonst als Setter. Für einfache Getter/Setter. Dumm, was auch immer, vielleicht?

bearbeiten: auf die Antworten folgen: Ich mag nicht wirklich bekommen und setzen, weil ich es vorziehe, die Schnittstelle so explizit wie möglich zu haben. Wenn es nur ein paar Eigenschaften gibt, ist es auch IMHO übertrieben. Also möchte ich es mit einigen expliziten Gettern/Settern auf Klassen/Objekte eingrenzen.

+1

Wenn Sie möchten, dass die Schnittstelle so explizit wie möglich ist, warum denken Sie überhaupt über eine Methode nach, die zwei verschiedene Dinge macht, je nachdem, was an sie übergeben wird? –

+0

Gute Frage. Ich hatte gehofft, dass die Idee klar wäre, wenn man damit konfrontiert würde. Nicht so klar wie setX/getX, aber ausreichend, um ein wenig Klarheit für eine weniger überladene Schnittstelle abzuwägen. – koen

+0

Ich habe viele verschiedene Methoden ausprobiert, und eine Funktion mit dem gleichen Namen wie die Klasseneigenschaft ist mein Favorit. '__get' und' __set' machen den aufrufenden Code nett, aber der Klassencode ist ein bisschen hässlich. Und es gibt keinen großen Unterschied zwischen $ obj-> property und $ obj-> property() '. – DisgruntledGoat

Antwort

1

Natürlich könnten Sie das tun, wenn es sinnvoll, in der Anwendung macht, sonst würde ich nur die Standard-Getter/Setter, die für Sie wurden bereits eingerichtet. Ihre Funktion könnte etwa so aussehen:

public function name($val = null) 
{ 
    if (is_null($val)) 
    { 
    return $this->name; 
    } 
    else 
    { 
    $this->name = $val; 
    } 
} 
+0

Ich möchte den Grund für den Downvote wissen. – koen

+0

Ich auch ... ;-) –

+2

Ich war nicht der Downvoter, aber ich möchte darauf hinweisen, dass diese Art kombinierter Getter/Setter es nicht erlaubt, die fragliche Eigenschaft auf NULL zu setzen. – Otterfan

4

Das Problem ist, es wäre schwer zu folgen. Ich würde lieber PHP5s __get und __set verwenden, also ist es natürlicher, Variablen zu bekommen und zu setzen, und jeder würde genau wissen, was ich mache. IE:

 
class myClass 
{ 

    function __get($name) 
    { 
     return $this->array[$name]; 
    } 
    function __set($name, $value) 
    { 
     $this->array[$name] = $value; 
    } 
    function print() 
    { 
     echo $this->array['test']; 
    } 
} 
$obj = new myClass; 
$obj->test = "Hi"; 
echo $obj->test; //echos Hi. 
$obj->print(); //echos Hi. 
2

Es kann mit der __call() magischen Methode durchgeführt werden.

class Test { 
    public function __call($name, array $args) { 
     $variable =& $this->$name; 
     if(!empty($args)) { 
      $variable = $args[0]; 
     } 
     return $variable; 
    } 
} 
+0

Schicken Sie absichtlich die Eigenschaft für Sätze zurück? – hobodave

+0

Ja. – moo

+0

Es ist wahrscheinlich für die Kürze, aber könnte ein schöner Nebeneffekt sein, vor allem, wenn Sie etwas hineinlegen, um zu beschränken, welche Variablen hinzugefügt werden könnten. –