2010-05-25 3 views
1

J'ai besoin de conseils sur l'organisation de mon code PHP.Utilisation de classes en PHP pour stocker la fonction

J'ai besoin de classes où je peux stocker différentes fonctions, et j'ai besoin d'accéder à ces classes dans différentes parties de mon projet. Faire un objet de cette classe à chaque fois est trop triste, alors j'ai trouvé deux façons de le résoudre.

La première est d'utiliser des méthodes statiques, comme

class car { 
public static $wheels_count = 4; 

public static function change_wheels_count($new_count) { 
    car::$wheels_count = $new_count; 
} } 

seconde est d'utiliser un singleton:

class Example { 
// Hold an instance of the class 
private static $instance; 

// The singleton method 
public static function singleton() 
{ 
    if (!isset(self::$instance)) { 
     $c = __CLASS__; 
     self::$instance = new $c; 
    } 

    return self::$instance; 
} } 

Mais l'auteur de l'article sur singletons dit que si j'ai trop singletons dans mon code je devrais le reconstruire. Mais j'ai besoin de beaucoup de ces classes.

Quelqu'un peut-il expliquer les avantages et les inconvénients de chaque façon? Lequel est le plus utilisé? Y a-t-il plus de belles manières?

+1

Bienvenue sur SO. Vérifiez cela: http://stackoverflow.com/questions/1812472/in-a-php-project-how-do-you-organize-and-access-your-helper-objects –

Répondre

0

Lorsque vous dites que vous devez utiliser une classe quelconque pour stocker des fonctions, je suppose que vous utiliserez normalement des fonctions simples, mais que vous ne voulez pas polluer la portée globale. Ce problème que vous rencontrerez tout le temps en PHP.

Si vous avez la chance de travailler avec PHP 5.3, vous pouvez utiliser des espaces de noms pour sortir les fonctions de la portée globale. En effet, les espaces de noms constituent un moyen pratique d'auto-compléter les préfixes que vous auriez normalement sur les fonctions pour essayer d'assurer leur unicité. En raison de cette implémentation primitive, aucun contrôle d'accès n'est disponible pour les espaces de noms. Si vous souhaitez concevoir une interface, vous n'avez pas de chance car toutes les fonctions sont globalement accessibles.

Dans ce cas, utilisez une classe statique. Non, ce n'est certainement pas la plus belle solution mais c'est littéralement le meilleur que PHP peut offrir. Avec une classe statique, vous pouvez effectivement préfixer vos fonctions pour l'unicité et utiliser le contrôle d'accès.

Les singletons sont un concept orienté objet qui résout un problème différent. Si votre conception originale n'implique aucun objet, ne les présentez pas maintenant.

Cela dit, vous avez une fonction appelée change_wheels_count(). Cette fonction a une notion d'état, et chaque fois que vous avez besoin d'un état, vous avez besoin d'un objet. Je ne sais pas si votre code était juste un exemple rapide ou votre situation actuelle. Si c'était votre situation actuelle, je dirais que vous n'avez besoin ni d'une classe statique ni d'un singleton.

+0

Merci beaucoup! C'était très utile. – Artur

Questions connexes