2011-09-23 5 views

Répondre

8
$name = $foo->getName(); 

Cela invoquera un membre ou une fonction statique de l'objet $foo, tandis que

$name = $foo::getName(); 

invoqueront une fonction statique de la classe de $foo. Le 'profit', si vous voulez l'appeler ainsi, d'utiliser :: est d'être en mesure d'accéder aux membres statiques d'une classe sans avoir besoin d'une instance d'objet de cette classe. C'est,

$name = ClassOfFoo::getName(); 
+0

'::' peut être accessible aux membres 'static' de classe ??? woah! Assez de profit donc! : D Merci mon pote, K-ballo –

+0

Si '::' peut accéder au membre 'static', alors quelle est la beauté de' static' ?? Je pense que c'est juste une manière non structurée en PHP :( –

+0

Vous semblez confondre 'static' avec quelque chose d'autre, dans toutes les langues, il y a des façons d'accéder aux membres statiques (publics) d'une classe –

2
  • -> est appelée à accéder à une méthode d'une instance (ou une variable d'un objet instancié)
  • :: est utilisé pour accéder à des fonctions statiques d'un objet uninstanced
0

Ils sont pour différents types de fonctions. -> est toujours utilisé sur un objet pour les méthodes statiques et non statiques (bien que je ne pense pas que ce soit une bonne pratique, utilisez -> pour les méthodes statiques). :: est seulement utilisé pour les méthodes statiques et peut être utilisé sur des objets (à partir de PHP 5.3) et surtout les classes.

<?php 

class aClass { 
    static function aStaticMethod() {} 
    function aNormalMethod() {} 
} 

$obj = new aClass(); 
$obj->aNormalMethod(); //allowed 
$obj->aStaticMethod(); //allowed 
$obj::aStaticMethod(); //allowed as of PHP 5.3 
$class_name = get_class($obj); 
$class_name::aStaticMethod(); //long hand for $obj::aStaticMethod() 
aClass::aStaticMethod(); //allowed 
//aClass::aNormalMethod(); //not allowed 
//aClass->aStaticMethod(); //not allowed 
//aClass->aNormalMethod(); //not allowed 
+0

' $ obj-> aStaticMethod(); // allowed' Permis ???? Dude, je deviens confus à propos de '->'. Êtes-vous sûr que '->' est autorisé pour cela? –

+0

Essayez de lancer le script, ça fonctionne mais ce n'est pas vraiment la meilleure pratique. –