PHP-расширение класса
Я сделал много и много кода на PHP, который является объектно-ориентированным, но до сих пор все мои классы были "сингулярными", я полагаю, вы можете это назвать. Я в процессе изменения нескольких классов (которые имеют 5 или около того идентичных методов), чтобы расширить один класс (чтобы избавиться от дубликата кода). Я столкнулся с несколькими проблемами.
Я пытаюсь получить доступ к методу в родительском классе, но вы видите эту проблему.
родительский класс:
class DatabaseObject {
public static function find_all() {
return self::find_by_sql("SELECT * FROM " . self::$table_name);
}
}
ребенок Класс:
class Topics extends DatabaseObject {
protected static $table_name = "master_cat";
protected static $db_fields = array('cat_id', 'category');
public $cat_id;
public $category;
}
код пытается получить доступ ко всей информации из этой таблицы из файла php / html:
$topics=Topics::find_all();
foreach($topics as $topic):
echo $topic->category;
endforeach;
как вы можете видеть, большая часть кода не была объединена с новым способом делать вещи. Мне нужно изменить self::$table_name, который больше не работает по-новому, я делаю вещи. У меня будет около 5 классов, расширяющих этот объект, так что лучший способ кодирования этого, чтобы я мог получить доступ к различным таблицам с помощью одного метода (а не включать этот точный find_all() метод в 5 различных классах.
2 ответов
вы можете попробовать позднюю статическую привязку как указанных ниже, или одноэлементное решение также должно работать:
<?php
abstract class DatabaseObject {
private $table;
private $fields;
protected function __construct($table, $fields) {
$this->table = $table;
$this->fields = $fields;
}
public function find_all() {
return $this->find_by_sql('SELECT * FROM ' . $this->table);
}
}
class Topics extends DatabaseObject {
private static $instance;
public static function get_instance() {
if (!isset(self::$instance)) {
self::$instance = new Topics('master_cat', array('cat_id', 'category'));
}
return self::$instance;
}
}
Topics::get_instance()->find_all();
вы должны изучить концепцию Поздняя Статическая Привязка в PHP. Это позволяет получить доступ к статической константе или функции из класса, который был вызван.