PHP - Extending Class
class, extends, object-oriented-database, php
Solution
You could try late static binding as mentioned below, or a singleton solution should work as well:
<?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();
Problem
I've done lots and lots of code in PHP that is object-oriented, but up until now, all of my classes have been, "singular", I suppose you can call it. I am in the process of changing several classes (that have 5 or so identical methods) to extend one class (to rid myself of duplicate code). I am running into a few issues. I am trying to access a method in a parent class, but you can see the issue. Parent class: ``` class DatabaseObject { public static function find_all() { return self::find_by_sql("SELECT * FROM " . self::$table_name); } } ``` Child Class: ``` class Topics extends DatabaseObject { protected static $table_name = "master_cat"; protected static $db_fields = array('cat_id', 'category'); public $cat_id; public $category; } ``` Code trying to access all info from this table from php/html file: ``` $topics=Topics::find_all(); foreach($topics as $topic): echo $topic->category; endforeach; ``` As you can see, Most of the code has not been merged to the new way of doing things. I need to change the self::$table_name which no longer works in the new way I am doing things. I will have about 5 Classes extending this object, so what is the best way of coding this so I can access different tables with one method (rather than including this exact find_all() method in 5 different classes.