J'ai deux classes: Action
et MyAction
. Ce dernier est déclaré comme:
class MyAction extends Action {/* some methods here */}
Tout ce dont j'ai besoin est une méthode dans la Action
classe (uniquement dans celle-ci, car il y aura beaucoup de classes héritées, et je ne veux pas implémenter cette méthode dans toutes), qui retournera le nom de la classe à partir d'un appel statique. Voici de quoi je parle:
Class Action {
function n(){/* something */}
}
Et quand je l'appelle:
MyAction::n(); // it should return "MyAction"
Mais chaque déclaration de la classe parent n'a accès qu'à la __CLASS__
variable de classe parent , qui a la valeur «Action».
Y a-t-il un moyen possible de le faire?
la source
get_called_class()
:)new static();
depuis l'intérieur d'une méthode statique privée (en utilisant xampp sous windows et php> 5.5).:s
Depuis la version 5.5, vous pouvez utiliser un
class
mot-clé pour la résolution du nom de classe , ce qui serait beaucoup plus rapide que d'effectuer des appels de fonction. Fonctionne également avec les interfaces.la source
Ce n'est pas la solution idéale, mais cela fonctionne sur PHP <5.3.0.
Le code a été copié depuis septuro.com
la source
Maintenant (quand 5.3 est arrivé) c'est assez simple:
http://php.net/manual/en/function.get-called-class.php
la source
la source
Il n'y a aucun moyen, dans les versions PHP disponibles, de faire ce que vous voulez. La solution de Paul Dixon est la seule. Je veux dire, l'exemple de code, car la fonctionnalité de liaison statique tardive dont il parle est disponible à partir de PHP 5.3, qui est en version bêta.
la source
(PHP 5> = 5.3.0, PHP 7)
get_called_class - Le nom de la classe "Late Static Binding"
ce lien pourrait être utile
la source