Ich bin ein relativer Neuling in PHP, und ich bin der beste Weg, um einige Datenbankzugriffscode zu implementieren. Ich versuche, einige einfache Datenbankzugriffsobjekte zu erstellen - jede Tabelle erhält ihre eigene Klasse, jede Instanz der Klasse repräsentiert eine Zeile in der Tabelle, Sie kennen den Drill.Abstrakte statische Funktion in PHP 5.3
Ich habe Code, der zu funktionieren scheint, aber einige von dem, was ich online gesehen habe, macht mir Sorgen, dass mein Ansatz irgendwie falsch sein könnte. Und seit "Kann ich das tun?" und "SOLL ICH das tun?" sind zwei verschiedene Fragen, ich hatte gehofft, dass einige PHP-Tierärzte hineinspielen könnten.
Meine aktuelle Strategie besteht darin, eine abstrakte Tabellenklasse auf Basisebene zu erstellen, die den allgemeinen Code enthält und dann jede Klasse für eine einzelne Tabelle erweitert.
Mein Hauptanliegen ist dieser Code:
abstract class Table {
protected abstract static function get_fields();
protected abstract static function get_primary_key();
protected abstract static function get_table_name();
Die Idee ist, dass jede implementierenden Klasse der Feldnamen definieren, die den Primärschlüssel (n), die Tabellennamen usw. und dann der Tabellenklasse werden diese Funktionen in bestimmten Rohlingen wie so füllen: sehen, können
static function insert($values) {
$field_list = array();
$value_list = array();
foreach (static::get_fields() as $field_name) {
if (isset($values[$field_name])) {
$field_list[] = $field_name;
$value_list[] = self::escape($values[$field_name]);
}
}
$field_string = join(", ", $field_list);
$value_string = "'" . join("', '", $value_list) . "'";
$sql = "insert into " . static::get_table_name() . " ($field_string) values ($value_string)";
wie Sie der Schlüssel ist, dass ich den Zugriff auf diese static abstract
Funktionen, indem sie mit static::
prefacing. Und soweit ich das beurteilen kann, funktioniert es!
Die angenommene Antwort auf this question zeigt jedoch an, dass abstract static
Funktionen in 5.3 nicht erlaubt sind.
Also, ich versuche herauszufinden, was ich davon halten soll. Ist die Antwort falsch - sind abstract static
Funktionen jetzt als völlig legaler PHP-Code betrachtet? Mache ich in meinem Code etwas, das nicht ratsam ist? Gibt es einen anderen Ansatz, den ich berücksichtigen sollte?
Wenn Sie sagen, „Sie wissen, das Geschäft "Ich weiß eine Sache sicher: Der Deal ist, keine statischen Funktionen dafür zu verwenden. Wenn Sie denken, dass es ist, muss es der Null-Checker-Deal sein, da statische Funktionen nicht gut mit Vererbung funktionieren, die Sie gerne nutzen. Zusätzlich empfehle ich Ihnen, das PoEEA zu lesen, ich meine, Sie kennen das Buch, oder? – hakre
@hakre: Woher kommt diese Feindseligkeit und Herablassung? "Sie kennen den Drill" war ein Verweis auf einen ziemlich standardisierten Ansatz zum Modellieren von Datenbankinhalten, von dem ich nicht dachte, dass er es wert wäre, belebt zu werden. – BlairHippo
Bitte geben Sie an, dass das, was Sie beschreiben, ein ziemlich Standardansatz ist. – hakre