Der von Ihnen gepostete Code ist überhaupt keine Klasse. Es ist nur eine Reihe von globalen Funktionen und Variablen mit funky Namen. Versuchen Sie, statische Eigenschaften und Methoden zu vermeiden, da sie nicht OOP sind. Versuchen Sie auch, öffentliche Eigenschaften und Getter/Setter zu vermeiden, da sie nur verkappte prozedurale Programmierung sind.
Ein Skelett einer Car
Klasse könnte wie folgt aussehen:
class Car {
private $wheel_count;
private $name;
private $color;
public function __construct($wheel_count, $name, $color)
{
$this->wheel_count = $wheel_count;
$this->name = $name;
$this->color = $color;
}
public function paint($new_color)
{
$this->color = $new_color;
}
public function describe()
{
return sprintf('%d wheels, %s %s', $this->wheel_count, $this->color, $this->name);
}
}
Die Objekteigenschaften sind privat. Kapselung ist eines der Schlüsselkonzepte von OOP. Sie sind im Konstruktor festgelegt. Die Rolle des Konstruktors besteht darin, das Objekt zu initialisieren und betriebsbereit zu machen. Stellen Sie sicher, dass der Konstruktor alle Eigenschaften des Objekts initialisiert und nichts anderes tut (keine Arbeit im Konstruktor).
Erstellen Sie Methoden in der Klasse für die Aktionen, die für Ihre Klasse sinnvoll sind. Zum Beispiel ändert sich die Anzahl der Räder eines Autos nie, es hat keinen Sinn, eine Methode zu schreiben, um eine andere Anzahl von Rädern einzustellen. Aber die Farbe des Autos ändert sich manchmal und die paint()
Methode behandelt das.
Vermeiden Sie es, "getters" zu schreiben (d. H. Methoden, die nichts tun, als den Wert einer Eigenschaft zurückzugeben). Sie sind das Zeichen, dass irgendein Code, der zu der Klasse gehört, irgendwo außerhalb der Klasse geschrieben ist (und oft wird er hier und da und überall dupliziert, mit geringen oder keinen Änderungen). Wann immer es möglich und angemessen ist, schreibe eine Methode, die die Eigenschaften des Objekts verwendet, um einen nützlichen Wert zu erzeugen (im Gegensatz zum Schreiben von Gettern, um den nützlichen Wert irgendwo anders berechnen zu lassen).
Dies ist, wie die Car
Klasse weiter unten beschrieben verwendet wird:
$car1 = new Car(4, 'Mazda', 'red');
$car2 = new Car(8, 'big truck', 'blue');
echo($car1->describe());
# 4 wheels, red Mazda
$car1->paint('green');
echo($car1->describe());
# 4 wheels, green Mazda
Dies ist nicht OOP- sollten Sie Getter/Setter statt jede Eigenschaft in 1-Array setzen + auch keine Notwendigkeit für statische –
Mögliche doppelte Verwendung von [PHP - Merge zwei Arrays (gleiche Länge) in einem assoziativen?] (Https://stackoverflow.com/questions/1200885/php-merge-two-arrays-same-length-into-one-associative) – War10ck
Warum tun Sie legen die Details in einer separaten Funktion fest? Planen Sie in Zukunft diese Werte weiterzugeben? Andernfalls macht es keinen Sinn, warum Sie das bereits hydratisierte Array nicht erstellen würden. – War10ck