2012-10-24 3 views
0

Avec l'apprentissage de fuelPHP, je suis présenté sur l'appel de classes en utilisant la résolution de portée, ou :: en sens. En règle générale, lorsque l'on appelle une méthode dans une classe que nous faisons ...Différence dans l'appel de classe PHP

$myclass = new myclass(); 
$myclass->mymethod(); 

sur le carburant, les méthodes sont généralement appelés de cette manière ...

myclass::mymethod(); 

Je me demandais s'il y a des différence entre les deux? Est-ce que la résolution de portée est quelque chose d'une mise à jour sur 5.3 aussi bien ... si non, lequel est idéal, ou quand dois-je les utiliser.

Merci.

+0

Vous devriez lire ceci http://php.net/manual/fr/language.oop5.static.php –

+0

L'opérateur '::' a été autour depuis un moment en fait :) –

Répondre

0

Je ne sais pas comment fonctionnerait myclass::mymethod();, puisque j'utilise une telle syntaxe uniquement lorsque j'appelle une classe STATIC.

MyClass::DoSomething();

appellerait une méthode statique nommée DoSomething()

tout

$instance = new MyClass();

$instance->DoSomething();

appellerait la méthode d'instance.

Je ne l'ai pas testé, mais je crois que vous courrez dans une erreur si vous $instance::DoSomething()

3

L'opérateur de résolution de portée permet d'accéder soit constantes de classe comme ::const, les variables statiques comme ::$var ou appeler des méthodes statiques comme ::method() .

Voir http://php.net/manual/en/language.oop5.static.php

Les méthodes statiques peuvent être appelées sans avoir une instance de la classe, ils sont définis. Ils sont définis dans cette classe avec le mot-clé static.

Par exemple, l'une des méthodes statiques de CakePHP est définie comme ceci:

class ClassRegistry { 
    // ... 
    public static function &getInstance() { 
     // ... 
    } 
} 

... que vous pouvez appeler comme ClassRegistry::getInstance().

Sans le mot clé static, vous devez utiliser une instance de la classe ClassRegistry pour appeler cette fonction.

Vous pouvez en lire plus ici, en particulier sur les raisons de l'utilisation static méthodes dans votre propre code peut parfois être une mauvaise idée: http://kore-nordmann.de/blog/0103_static_considered_harmful.html

+1

Ajoutez plus d'information ou c'est juste un commenter ne pas répondre –

+1

Votre souhait est ma commande, @ shiplu.mokadd.im :) –

+1

La première phrase n'a pas de sens; '::' * * est l'opérateur de résolution de portée après tout :) –

0

Je pense que la meilleure façon de comprendre pourquoi il y a un appel statique et ce qu'il fait derrière la scène est de vérifier cette entrée de blog FuelPHP: http://fuelphp.com/blog/2011/05/why-did-you-do-that

la différence évidente est que la première solution $myObject->myMethod() il est un appel dynamique: vous avez besoin d'une instance pour exécuter myMethod().Dans la seconde solution, MyClass::myMethod() est un appel statique. La classe agit comme une sorte d'espace de noms où une fonction appartient. Vous n'avez pas besoin d'une instance pour cela.