2009-11-26 6 views
3

Cette chose m'inquiète depuis longtemps et je ne peux pas le trouver n'importe où!Quelle est la différence entre -> et :: en PHP?

Quelle est la différence lors de l'utilisation des classes en php entre :: et ->

Permettez-moi de donner un exemple.

Imaginez une classe nommée MyClass et dans cette classe il y a une fonction myFunction

Quelle est la différence entre l'utilisation:

MyClass myclass = new MyClass 
myclass::myFunction(); 

ou

MyClass myclass = new MyClass 
myclass->myFunction(); 

Merci

Répondre

2

comme indiqué, "::" est pour les méthodes statiques alors que "->" est par exemple la méthode appelle

sauf lors de l'utilisation de parent :: pour accéder à des fonctions dans une classe de base, où "parent ::" peut être utilisé à la fois pour les méthodes parentales statiques et non statiques

abstract class myParentClass 
{ 
    public function foo() 
    { 
     echo "parent class"; 
    } 
} 

class myChildClass extends myParentClass 
{ 
    public function bar() 
    { 
     echo "child class"; 
     parent::foo(); 
    } 
} 

$obj = new myChildClass(); 
$obj->bar(); 
11
MyClass::myFunction(); // static method call 

$myclass->myFunction(); // instance method call 
+0

Donc, est-ce que 'myclass :: myFunction();' compile, et si oui, qu'est-ce que cela signifie? – Oskar

+0

Je viens juste de l'essayer et $ myclass :: myFunction() n'analyse pas php - ce qui est bien puisque par définition la méthode statique ne devrait pas pouvoir être exécutée depuis une instance. –

+0

Cela a du sens, mais on ne sait jamais avec PHP ... :) – Oskar

3

"::" est pour appeler des méthodes statiques sur la classe. Ainsi, vous pouvez utiliser:

MyClass::myStaticFunction() 

mais pas:

MyClass->myStaticFunction() 
0
class MyClass { 
    static function myStaticFunction(...){ 
    ... 
    } 

} 

//$myObject=new MyClass(); it isn't necessary. It's true?? 

MyClass::myStaticFunction(); 
Questions connexes