Hej udviklere,
Hvis jeg nu har en klasse som udelukkende er beregnet til at arve fra (altså en abstrakt klasse så vidt jeg har forstået) som denne:
abstract class DBrow
{
(...)
static protected $db_table
(...)
static public function getTable { return self::$db_table; }
(...)
}
Klassen indeholder flere variable og metoder. En instans af klassen er beregnet til at repræsenterer en række i en MySQL tabel. Til fælles for rækkerne i en tabel ligger de alle i den samme tabel, derfor er $db_table erklæreret static.
Jeg definerer en ny klasse til at repræsenterer tabellen t_personer og t_biler (bare for at tage et eksempel)
class TPersoner extends DBRow
{
(...)
static public function init()
{
parent::$db_table = "t_personer";
}
}
class TBiler extends DBRow
{
(...)
static public function init()
{
parent::$db_table = "t_biler";
}
}
Nu kalder jeg så klasserne på følgende måde
TBiler::init();
TPersoner::init();
TPersoner::getTable() // Returnerer "t_personer"
TBiler::getTable() // Returnerer OGSÅ "t_personer" (grrr!!!)
Jeg er stadig ny i OOP, og da jeg satte disse klasser sammen havde jeg ikke forudset at det sidste kald "TBiler::getTable()" OGSÅ ville returnerer "t_personer". Det er selvfølgelig logisk nok, men jeg kunne godt tænke mig at TBiler::getTable() havde returnerer "t_biler".
Jeg er ganske klar over at dette ikke er muligt med lige præcis denne klasse-struktur, MEN hvordan kommer jeg uden om det her problem :-)?