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/...