2009-09-24 5 views
2

J'essaie d'apprendre OO et les classes et toutes ces bonnes choses en PHP, j'apprends enfin la sytaxe assez bon pour l'utiliser et je suis curieux de savoir s'il y a un avantage à démarrer un nouvel objet au lieu d'utiliser des méthodes statiques ... laissez-moi vous montrer un peu de code pour ce que je veux dire ...Mieux vaut utiliser un objet ou une fonction statique en PHP?

<?PHP 
test class 
{ 
    public function cool() 
    { 
     retunr true; 

    } 
} 

//Then calling it like this 
$test = new test(); 
$test->cool(); 
?> 

OU

<?PHP 
test class 
{ 
    public static function cool() 
    { 
     retunr true; 

    } 
} 

//Then calling it like this 
test::cool(); 

?> 

Je sais que c'est l'exemple le plus élémentaire qu'on puisse imaginer et la réponse dépend probablement de la situation, mais peut-être vous peut m'aider à comprendre un peu mieux

Répondre

3

Pour votre exemple, il est préférable d'utiliser une fonction statique, mais la plupart des situations ne seront pas si simples. Une bonne règle à suivre est que si une méthode n'utilise pas la variable $this, elle devrait être rendue statique.

+0

On dirait une bonne règle générale en ce qui concerne la testabilité du code. – svandragt

1

Pensez à des classes comme des «blueprints» à un objet. vous voulez utiliser la méthode statique quand c'est une fonction générale qui pourrait s'appliquer à n'importe où, et utiliser des méthodes quand vous voulez référencer cet objet spécifique.

+0

Presque vous a donné +1, mais ... "vous voulez utiliser la méthode statique quand c'est une fonction générale qui * applique toujours la même chose * à n'importe quel objet". @too la réponse de php était meilleure - si vous avez besoin d'accéder à '$ this', ce n'est pas statique. – Josh

1

Voici un article qui traite des différences de performances entre ces concepts: http://www.webhostingtalk.com/showthread.php?t=538076.

Fondamentalement, il n'y a pas de différence majeure dans les performances, alors le choix est fait en fonction de votre conception.

Si vous allez créer un objet plusieurs fois, alors évidemment une classe a du sens.

Si vous créez une fonction d'utilitaire qui n'est pas liée à un objet particulier, créez une fonction statique.

+0

Je ne pense pas que nous ayons besoin de parler de performance dans un tel cas. Courir après la performance dans des cas aussi simples endommage presque toujours un style de programmation et fait mal sentir votre code. –

+0

Je pensais juste qu'il était intéressant qu'il n'y ait pas vraiment de différence, et que ça aide à savoir s'il y aurait une grosse pénalité en utilisant l'un ou l'autre, pour aider à prendre des décisions. –

Questions connexes