Affectation d'une variable de classe de la sous-classe sans constructeur
-
13-11-2019 - |
Question
LI amise une couche de modèle léger pour l'accès à la base de données de mon projet. J'aimerais que ce soit dans l'esprit de Ruby sur des rails.Au lieu d'instantifier un nouveau modèle Objet, je veux utiliser une approche singleton.Voici le problème actuel que je suis confronté:
class BaseModel {
public static $name;
public static function get($id) {
echo "SELECT * FROM ". self::$name ."s WHERE ". self::$name .' = '.$id;
}
}
class Customer extends BaseModel {
//parent::$name = 'customer'; => ERROR
}
$c = Customer::get(4);
Y a-t-il un moyen d'affecter les membres statiques des parents dans le corps de la classe?J'aimerais Pour éviter de créer une classe singleton réelle si possible.Merci.
La solution
La fonctionnalité que vous recherchez est appelée la fixation statique tardive (LSB) et heureusement été introduite à PHP en 5.3.Vous pouvez en lire ici: http://php.net/Manuel / EN / LANGUE.OOP5.LATE-STATIC-BINDINGS.PHP
Ceci est votre code réécrit avec LSB.
<?php
class BaseModel {
public static $name;
public static function get($id) {
echo "SELECT * FROM ". static::$name ."s WHERE ". static::$name .' = '.$id;
}
}
class Customer extends BaseModel {
public static $name = 'customer';
}
$c = Customer::get(4);
?>