Voici un exemple:
class Test { public function TestMethod() { print_r($this); // Gives me "Test1 Object ( )" } } class Test1 { public function Test1Method() { Test::TestMethod(); } } $test1 = new Test1; $test1->Test1Method();
3 Réponses :
Réponse courte: Vous appelez une méthode "non statique" à l'aide d'un appel de fonction statique, PHP essaie ensuite de trouver un "$ ceci" et le dernier véritable "$ ceci" était celui à Test1. P>
Si vous activez E_Strict Error Reporting, il se plaint. P>
de http://www.php.net/manual/fr /language.oop5.basic.php : p>
Le pseudo-variable
$ CU code> est disponible Quand une méthode est appelée à partir d'un contexte d'objet.
$ CU code> est une référence à l'objet d'appel (généralement le objet auquel appartient la méthode, mais éventuellement un autre objet, si le la méthode est appelée statiquement de la contexte d'un objet secondaire). p> blockQuote>
Cela ne fait pas nécessairement beaucoup de sens, cependant, et invoquera un avertissement si
e_truct code> est activé. p>
Il serait logique si test1 code> était une sous-classe de
test code>; Peut-être que c'est juste un moyen peu coûteux de recréer le comportement code> trouvé dans les langues conçues pour OOP du début.
Quelle est la meilleure façon de vérifier si $ CU code> références à la classe actuelle? J'en ai besoin pour vérifier si la méthode s'appelait staticly ou de l'objet. Je suppose que c'est quelque chose comme
si ($ cette instance de __class__) {} code>. Ai-je raison?
@Saltlake: Je ne sais pas. Mais personnellement, j'ajuste e_strict code> pour empêcher ce type de piratage! Cela ne peut que conduire à la douleur à long terme.
est reliure statique tardive si je Je ne me trompe pas, ce qui pourrait être aussi fin vendredi. P>
J'ai demandé une question très similaire (pas une dupe). Les réponses ont été très utiles Stackoverflow.com/questions/516355/...