Résoudre un nom de fichier à partir d'un autre fichier
-
03-07-2019 - |
Question
Je peux actuellement faire ce qui suit:
class SubClass extends SuperClass {
function __construct() {
parent::__construct();
}
}
class SuperClass {
function __construct() {
// this echoes "I'm SubClass and I'm extending SuperClass"
echo 'I\'m '.get_class($this).' and I\'m extending '.__CLASS__;
}
}
Je voudrais faire quelque chose de similaire avec les noms de fichiers ( __ FILE __
, mais évalué dynamiquement); Je voudrais savoir dans quel fichier la sous-classe réside, à partir de la super-classe. Est-ce possible d'une manière élégante?
Je sais que vous pouvez faire quelque chose avec get_included_files ()
, mais ce n'est pas très efficace, surtout si j'ai de nombreuses instances.
La solution
Vous pouvez utiliser la réflexion.
$ref = new ReflectionObject($this);
$ref->getFileName(); // return the file where the object's class was declared
Autres conseils
Euh, pas vraiment, je peux penser à. Chaque sous-classe doit avoir une méthode implémentée explicitement qui renvoie __ FILE __
, ce qui annule complètement le point d'héritage.
Je suis aussi vraiment curieux de savoir pourquoi une telle chose serait utile.