Ich brauche ca. erstellen. 5-7 Klassen, jede Klasse enthält viele Mitglieder (sagen wir mal, jede Klasse wird 20 Mitglieder enthalten). Ich konnte sie mit dem öffentlichen Zugang erstellen, wie:PHP OOP eine Menge Setter, Getter
class A {
public $myPropertyOne = '';
public $myPropertyTwo = '';
...
}
Meine bevorzugte Art und Weise natürlich diese Elemente privat zu machen und für jede Eigenschaft get/set-Methoden erstellen. I.e.
class A {
private $myPropertyOne = '';
private $myPropertyTwo = '';
public function getMyPropertyOne() {
return $this->myPropertyOne;
}
public function setMyPropertyOne($myPropertyOne) {
$this->myPropertyOne = $myPropertyOne;
}
public function getMyPropertyTwo() {
return $this->myPropertyTwo;
}
public function setMyPropertyTwo($myPropertyTwo) {
$this->myPropertyTwo = $myPropertyTwo;
}
}
Aber wenn man bedenkt, dass eine Klasse 20 Eigenschaften haben wird, werde ich zusätzlich 40 Methoden hinzufügen. Und meine Sorge hier ist, wie wird dies verlangsamen das Skript und viel mehr Speicher das wird erfordern (erinnere mich, ich werde mehrere Klassen wie folgt haben).
Eine andere Lösung könnte sein, die magischen Funktionen __set, __get zu verwenden, aber das möchte ich nicht, weil die Codevervollständigung in der Entwicklungs-IDE keine Eigenschaften vorschlägt, die für mich entscheidend sind.
Wenn dies eine kompilierte Sprache wäre (wie C++) hätte ich keine Frage und würde die Lösung mit Gettern, Setter verwenden, aber da die Sprache PHP interpretiert ist, interessieren mich meine Skripts, weniger RAM zu verwenden und so zu sein so schnell wie möglich.
Vielen Dank im Voraus, alle Gedanken zu dieser Frage würden sehr geschätzt werden!
Meine Meinung
Vielen Dank für Ihre Antworten, ich wollte nur auf diese Frage eine Antwort aussehen wird meiner Meinung nach, falls jemand teilen.
Ich kann nicht voll und ganz mit denen einverstanden sein, die sagen, dass Sie sich nicht um Leistung kümmern sollten, da dies die Aufgabe von Optimierern ist, ich denke, dass dies ein wichtiger Faktor ist (gut zumindest für mich), wenn wir mit interpretierter Sprache wie PHP müssen wir immer über Speicher und Geschwindigkeit nachdenken (das erinnert mich an die Zeit, als ich System-Apps für DOS entwickelte, heh :) und Sie waren immer mit schlechter CPU und Kilobyte Gesamt-RAM begrenzt, so dass Sie glücklich wurden, wenn Sie könnte ein zusätzliches Byte speichern), in PHP Entwicklung haben Sie das gleiche Bild als unabhängig davon, wie viele Server Sie hinzufügen, die Anzahl der Benutzer wird immer höher sein, so dass Sie immer entscheiden müssen, ob Sie klassische/sichere/richtige Methode folgen oder um dies zu vermeiden und etwas an Geschwindigkeit oder Speicher zu gewinnen.
Also meine Meinung ist, dass der beste Weg hier ist, öffentlichen Zugriff für alle Mitglieder zu verwenden und Getter/Setter für alle Eigenschaften zu vermeiden und privaten Zugriff mit get/set-Methoden für Eigenschaften zu verwenden, die Datenvalidierung oder Initialisierung erfordern bevor ein Wert gesetzt wird.
Zum Beispiel:
class B {
public $myPropertyOne = '';
public $myPropertyTwo = '';
private $myPropertyThree = array();
public function getMyPropertyThree() {
return $this->myPropertyThree;
}
public function setMyPropertyThree($val) {
if(!is_array($val)) {
return;
}
$this->myPropertyThree = $val;
}
}
Danke Zeit auf meine Frage zu verbringen!
dies ist eine Mikro-Optimierung, und Sie sollten * nie * sich darüber sorgen. –
Nun ja, aber eine Perspektive 280 hinzuzufügen Methoden (für 7 Klassen, 20 private Mitglieder) nur für diese ein wenig Angst vor Speicher/Geschwindigkeit Standpunkt. Und lassen Sie uns sagen System wächst und ich werde diese Klassen auf die Anzahl von 15 erweitern .. dann werde ich 600 Methoden bekommen Auf der anderen Seite stelle ich fest, dass diese Get/Set-Methoden nur bei Bedarf ausgeführt werden, aber gleichzeitig nehme ich an, dass wenn PHP Quellcode analysiert, es eine Tabelle von Methoden im Speicher erstellt, Syntaxanalyse durchführt und dies alles kann verlangsamen die Arbeit des Skripts viel, ist meine Annahme richtig? – user1476490
Speicher ist relativ billig und Methode Overhead ist nur per-Klasse (nicht pro Instanz). PHP macht auch Tricks wie die Behandlung mehrerer Anfragen im selben Prozess (über mod_php, usw.) so kann die anfängliche Ladezeit (so trivial sie auch sein mag) völlig ignoriert werden ... in jedem Fall * Benchmark zuerst * (unter tatsächlichen Bedingungen) um zu sehen, was die "langsamen" Teile eines Systems sind. (FWIW, nehme an, dass es 600 Methoden gibt, und jede Methode "verschwendet" 1kb. Ein satte 600kb wird "verschwendet". Nicht wirklich so viel im Schema der Dinge ... besonders in Anbetracht wie viel * jede Variable * in PHP bereits " Verschwendung ";-) –