2016-04-11 16 views
0

Heute lese ich ein Tutorial über MVC, der Kerl war Magie-Methoden (__get & __set()), um einen privaten Mitglied Wert zugreifen. (LINK) Zuerst war ich verwirrt, was __get und __set tun, aber nach dem Lesen im Internet fand ich schließlich heraus, dass diese Methoden aufgerufen werden, wenn das Mitglied von außen nicht zugänglich ist. Bisher ...Was ist der Sinn der __get() & __set() Methoden

Aber es macht keinen Sinn Code wie diese zu haben:

class Foo { 
    private $bar; 

    public __set($value) { 
     $this->bar = $value; 
    } 

    public __get() { 
     return $this->bar; 
    } 
}

I normalen Getter und Setter Ich denke, verwenden - Die IMO einen Weg leichter zu verstehen:

Wenn Sie das Mitglied außerhalb mit __get & __set zugreifen möchten, können Sie auch das Mitglied öffentlich machen - also verstehe ich nicht, was es Sinn macht. Können Sie mir (vielleicht mit einem Beispiel) sagen, was der Sinn dieser beiden Methoden ist?

+0

Sehen Sie nichts, was Sie als Beispiel in den von Ihnen bereitgestellten Link geschrieben haben. Er verwendet ein Array, nicht eine einzige Eigenschaft '$ this-> vars [$ index] = $ value ; '. Daher ist die Bedeutung der Verwendung von '__set' und' __get' für den Zugriff auf Schlüssel in einem Index ziemlich echt. Oder möchten Sie für jeden Schlüssel einen Accessor schreiben? – dbf

+0

Das ist wahr, aber ich habe das auch in verschiedenen Tutorials gesehen .... Und Sie können auch normale Getter und Setter verwenden, um ein Array zu setzen, nicht wahr? – Petschko

+0

Wie ich geschrieben habe, ist es legitim, sie zu benutzen, ich habe nicht gesagt, dass es klug ist, sie zu benutzen;) – dbf

Antwort

1

Sie entwickeln Ihr Programm und denken, dass Sie den Zugriff auf Ihre Attribute nicht kontrollieren müssen. Sie stellen daher die Öffentlichkeit statt privat. Aber während der Wartung merkt man, dass Sie Ihre Klasse ändern müssen, um eine Einschränkung zu erzwingen, so dass es verboten ist, ein Attribut zu 0 zu machen. Um diese Änderung vorzunehmen, müssen Sie einen Setter hinzufügen und Ihr Attribut privat ausgeben. Ergebnis: Es wird Sie dazu bringen, diese Änderung für alle Kunden dieser Klasse zu bewirken.

Wenn Sie Setter und Getteurs von Anfang an verwendet hätten, wäre die Wartung viel einfacher gewesen.

+0

Sie dienen also nur dazu, spätere Änderungen zu erleichtern? - Aber nicht um Ihr Programm mit ihnen zu erstellen – Petschko

+1

Objektorientierte Programmierung können Sie die Sichtbarkeit einer Klasse Methoden und Eigenschaften angeben. Bei Objekten ist es sehr ratsam, ihnen eine öffentliche Sichtbarkeit zu geben, da es so möglich ist, sie zu ändern, ohne dass Werte überwacht werden. – Pierre

+1

Schützen Sie den Zugriff seiner Eigenschaften durch Getter und Setter namens Kapselung. In der objektorientierten Programmierung ist die Kapselung die Idee, die Informationen in einem Objekt zu schützen und nur Methoden zur Manipulation dieses Objekts vorzuschlagen. Somit werden die mit den im Objekt enthaltenen Informationen verbundenen Eigenschaften durch die Methoden des Objekts bereitgestellt/validiert und liegen nicht mehr in der Verantwortung des externen Benutzers. Der externe Benutzer kann die Information nicht direkt ändern und riskiert die Verhaltenseigenschaften des Objekts. – Pierre