Sto lavorando a un progetto in cui mi piacerebbe poter dichiarare una variabile membro statica all'interno di una classe base astratta. Ho una classe del modello, una classe intermedia postale, e, infine, una classe post site-specific, qualcosa di simile al seguente:Variabili statiche PHP in classi astratte
abstract class Model {
protected static $_table = null;
protected static $_database = null;
...
}
abstract class PostModel extends Model {
public function __construct() {
if (!isset(self::$_table)) {
self::$_table = 'some_table';
}
parent::__construct();
}
...
}
class SitePostModel extends PostModel {
public function __construct() {
if (!isset(self::$_database)) {
self::$_database = 'some_database';
}
parent::__construct();
}
...
}
mi piacerebbe rendere evidente dalla classe del modello che il $ _Table e $ _database membri sono richiesti. Tuttavia, $ _table è davvero statico dal punto di vista della classe PostModel e $ _database è davvero statico dal punto di vista della classe SitePostModel.
È un modo legittimo per raggiungere il mio obiettivo? Dichiarare le variabili statiche nel Modello stesso implica che dovrebbero esistere solo una volta per la classe base astratta o solo una volta per la classe istanziata effettiva?
* (riferimento) * [capitolo sulla parola chiave 'static'] (http://php.net/manual/en/language.oop5.static.php) e [capitolo su Late Static Binding] (http : //php.net/manual/en/language.oop5.late-static-bindings.php). – Gordon
Per quanto riguarda se questo è legittimo o implica qualcosa, direi che questo è oggetto di discussione. IMO, non dovresti usare l'ereditarietà qui. Inoltre, Model solitamente non implica database. – Gordon
Ho apprezzato l'input @Gordon. Penso che "il modello non implichi il database" sia sufficiente per convincermi a non trattare i membri in questo modo. Nell'immediato futuro, questa classe Model modellerà solo le tabelle del database, ma potrebbe non essere sempre così. – michaelxor