Méthodes statiques en PHP
Pourquoi en PHP, vous pouvez accéder à la méthode statique via instance d'une classe, mais pas seulement par le type de nom?
Mise à JOUR: je suis .net développeur, mais je travaille avec des développeurs php trop. Récemment, j'ai trouvé ce moment sur les méthodes statiques appelée à partir de l'instance et ne peut pas comprendre pourquoi il peut être utile.
EXEMPLE:
class Foo
{
public static Bar()
{
}
}
Nous pouvons accepter méthode comme ceci:
var $foo = new Foo();
$foo.Bar(); //??????
source d'informationauteur donRumatta
Vous devez vous connecter pour publier un commentaire.
En PHP
la classe est instanciée à l'aide du mot clé new pour exemple;
$MyClass = new MyClass();
et la méthode statique ou propriétés peuvent être accessibles en utilisant soit l'opérateur de résolution de portée ou de l'objet de référence de l'opérateur. Par exemple, si la classe
MyClass
contient la méthode statiqueFoo()
puis vous pouvez y accéder soit par la voie.Ou
La seule règle est que les méthodes statiques ou les propriétés sont hors du contexte de l'objet. Par exemple, vous ne pouvez pas utiliser
$this
à l'intérieur d'une méthode statique.utiliser comme ceci :
Contrairement à ce que vous êtes probablement habitué .NET, PHP a les types de dynamiques. Considérer:
Donc, en permettant l'accès à des méthodes statiques via l'instance de l'objet, vous pouvez plus facilement appel à une fonction statique du même nom dans différents types.
Maintenant, je ne sais pas si il y a une bonne raison pourquoi accéder à la méthode statique via
->
est autorisé. PHP (5.3?) prend également en charge:qui est peut-être moins à confusion. Lors de l'utilisation de
::
il doit être une fonction statique pour éviter les mises en garde (à la différence de->
qui permet soit).En PHP, alors que vous êtes autorisé à accéder à la méthode statique par la référence à une instance de la classe, vous n'avez pas nécessairement besoin de le faire.
Pour exemple, voici un exemple de classe avec une fonction statique:
Vous pouvez accéder à la méthode statique juste par le nom du type comme ça, mais dans ce cas, vous devez utiliser les deux points (::), au lieu de "->".
(Veuillez noter que vous pouvez également accéder à la méthode statique via une instance de la classe ainsi à l'aide de "-->"). Pour plus d'informations: http://php.net/manual/en/language.oop5.static.php