Jestem względną nowicjuszką w PHP i staram się znaleźć najlepszy sposób na wprowadzenie kodu dostępu do bazy danych. Próbuję utworzyć proste obiekty dostępu do bazy danych - każda tabela otrzymuje własną klasę, każda instancja klasy reprezentuje wiersz w tabeli, znasz ćwiczenie.Streszczenie Funkcja statyczna w PHP 5.3
Mam kod, który wydaje się działać, ale niektóre z tego, co widziałem w sieci, sprawiają, że martwię się, że moje podejście może być w jakiś sposób błędne. A od "Czy mogę to zrobić?" i "POWINIENEM to zrobić?" są dwa różne pytania, miałem nadzieję, że niektórzy weterynarze PHP mogą zadzwonić.
Moja obecna strategia polega na utworzeniu abstrakcyjnej klasy tabeli na poziomie podstawowym, która zawiera cały wspólny kod, a następnie każda klasa reprezentująca pojedynczą tabelę rozszerza ją.
Moim głównym problemem jest to kod:
abstract class Table {
protected abstract static function get_fields();
protected abstract static function get_primary_key();
protected abstract static function get_table_name();
Chodzi o to, że każda klasa wdrożenia zdefiniuje nazwy pól, klucz podstawowy (s), nazwę tabeli, etc., a następnie klasę Table będzie wykorzystywać te funkcje do wypełnienia określonych półwyrobów, tak:
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)";
jak widać, kluczem jest to, że mam dostęp do tych funkcji przez static abstract
poprzedzając je static::
. I o ile wiem, działa!
Jednak zaakceptowana odpowiedź na this question wskazuje, że funkcje abstract static
są nadal niedozwolone w 5.3.
Więc, próbuję dowiedzieć się, co z tym zrobić. Czy odpowiedź jest błędna - czy funkcje abstract static
są teraz uznawane za całkowicie legalny kod PHP? Czy robię coś niewskazanego w moim kodzie? Czy istnieje inne podejście, które powinienem rozważyć?
Jeśli powiedzieć „wiesz ofertę ", Jedno wiem na pewno: umowa nie polega na używaniu do tego funkcji statycznych. Jeśli sądzisz, że tak, to musi to być sprawdzanie wartości null, ponieważ funkcje statyczne nie działają dobrze z dziedziczeniem, z którego chcesz korzystać. Dodatkowo proponuję przeczytać PoEEA, znaczysz, znasz rodzaj książki, prawda? – hakre
@hakre: Skąd się bierze ta wrogość i protekcjonalność? "Wiesz, że wiertło" było odniesieniem do dość standardowego podejścia do modelowania zawartości bazy danych, które moim zdaniem nie było warte omówienia. – BlairHippo
Proszę podać, że to, co opisujesz, jest dość standardowym podejściem. – hakre