2010-11-01 5 views
10

Les cours sont utiles et tous, mais quand j'écris un cours, je pense toujours à ça comme un gros rock sur mon script. J'ai l'impression que les cours devraient rarement être utilisés. Mais en même temps, nous sommes tous calés sur le paradigme OOP.Quand devrions-nous utiliser la classe et quand nous ne devrions pas

Un script ne devrait-il jamais avoir de fonctions libres? Devrais-je utiliser mille classes seulement pour rendre le script plus propre? Et qu'en est-il des performances? Est-ce que class::method() nécessite tellement plus de temps puis un simple function()? Que signifie vraiment OOP? Je suis un peu confus.

Depuis que j'ai découvert la POO, je ne peux pas voir les fonctions aléatoires. Je suis obsédé. Je ne peux pas voir les fonctions qui n'ont pas de classe parent. Je préfère créer une classe avec juste une méthode puis voir cette fonction tout seul. Est ce bien? Existe-t-il des exemples de CMS OOP purs?

+0

Qu'est-ce que "fonctions aléatoires"? – Svisstack

+0

** duplicata possible de [fonctions.php vs OOP] (http://stackoverflow.com/questions/2392795/functions-php-vs-oop) et [Quel est le but des classes] (http://stackoverflow.com/questions/1993638/classes-whats-the-point) ** - Récapitulatif: soit vous utilisez OOP ou vous ne faites pas. – Gordon

+1

Je pensais qu'une classe "Utilities"/"Helpers" était standard dans la plupart des projets OO: P. – Matt

Répondre

6

La chose la plus importante pour un programmeur en PHP, à mon avis, autre que son expérience est sa boîte à outils. C'est-à-dire, un code qu'il/elle a écrit à l'intérieur et à l'extérieur, en arrière et en avant depuis des temps immémoriaux.

Pour moi, dans ce cas, l'avantage de la POO en clair. Avoir une classe que vous savez toujours préformer ce que vous voulez par des méthodes simples est beaucoup plus facile pour vous-même et les membres de l'équipe, alors il suffit d'appeler une multitude de fonctions statiques. Alors que vous pourriez soutenir qu'une bibliothèque de fonctions saticiques a le même but, à mon avis, les cours sont beaucoup plus faciles à lire et à comprendre. Par exemple, dans ma classe de session personnalisé un programmeur peut regarder mon code et voir,

$my_session = new session(); 
$my_session->start(); 

if (($session_errno = $my_session->error()) !== FALSE) 
{ 
    //DO SOMETHING BECAUSE OF A SESSION ERROR 
} 

et de comprendre aisément que les sessions dans cette application sont gérées par notre classe de session personnalisée, et devrait renvoyer un certain type de succès/échec sans avoir jamais examiné la bibliothèque/classe.Pendant ce temps, un appel comme celui-ci,

session_start(); 

if (session_error()) 
{ 
    //DO SOMETHING BECAUSE OF A SESSION ERROR 
} 

ne dit pas clairement que session_start() n'est pas un gestionnaire de session PHP par défaut, mais qu'il appellera les fonctions définies dans session_set_save_handler() qui a été inclus dans une liste méga comprend mondiale cela pourrait ne pas être facile à trouver dans une grande application. Il n'est pas aussi clair que session_error() est une fonction qui renvoie une erreur définie par le gestionnaire de session personnalisé, par opposition à une fonction qui peut rechercher activement les problèmes de session sur une session déjà générée et est complètement indépendante de la session par défaut de PHP.

Ce n'est pas un bon exemple, mais je pense que c'est un bon exemple. Je ne suis pas allé dans les détails sur la bonté qui protège les données de l'application dans son ensemble, l'héritage et tout ce qui rend la POO utile.

Mais rapidement, imaginez une classe qui accède à la base de données MYSQL d'une application. On passe beaucoup de temps à concevoir la classe pour utiliser les instructions préparées, enregistrer les erreurs et fournir une logique appropriée au programmeur si nécessaire. Une équipe peut s'inquiéter moins des problèmes d'accès à la base de données en appelant simplement les fonctions publiques d'accès aux données de la classe sans trop se soucier des erreurs fatales, de la mauvaise logique ou du SQL dangereux (injections et autres). Cela peut être fait avec des fonctions statiques comme vous le suggérez, MAIS chaque fonction de cette bibliothèque statique est exposée à l'application dans son ensemble, alors que seules les fonctions publique et 'SAFE' sont exposées à l'application qui utilise une base de données objet d'accès. Le programmeur ne peut pas accidentellement appeler une fonction dangereuse qui, si elle n'est pas correctement initialisée par d'autres fonctions, pourrait causer des problèmes majeurs, et le programmeur ne peut délibérément supprimer les erreurs ou autres données protégées par la classe avec un grand nombre de fonctions statiques et de variables globales.

Bien qu'une bonne application puisse être conçue sans aucun objet, un bon programmeur devrait profiter de la facilité d'utilisation, de l'extensibilité et des protections que les objets offrent le cas échéant.

Je partirai avec ma métaphore finale. Les objets sont comme des machines et des outils spécialisés dans une usine. Alors que l'usine elle-même possède un certain nombre de ces outils uniques sur sa chaîne de montage, des simples freins de flexion aux machines CNC et robots automatisés, ils ne constituent qu'une petite partie de l'équipe qui existe pour aider les ouvriers et les directeurs. fonctions, faire le travail de construire une meilleure voiture, un camion ou un vélo.

+0

Content de l'entendre. Mon but principal était de faire passer l'idée des objets comme outils, et non de mettre fin à toute la programmation moderne. – DrPerdix

1

Je pense que vous avez une mauvaise vision de la programmation OOP parce que vous ne le faites jamais. Quake 3 est pur en utilisant writed C sans classe et POO, alors ceci est une preuve que vous pouvez faire de bonnes choses sans utiliser POO. Mais si vous voulez, vous pouvez l'utiliser. Héritage dans les classes ont une petite fonctionnalité dans la pratique de la programmation de la logique métier, beaucoup mieux dans la programmation des cadres. Si vous décidez de programmer avec OOP alors écrivez de petits objets avec de petites fonctions qui font de petites choses, pas de grandes classes non lisibles avec des fonctions longues non intuitives, alors vous resterez propre dans votre code.

1

Jetez un oeil à ceci:

Les classes sont peu plus d'un conteneur pour les variables et les fonctions affectant ces variables, mais ils peuvent être très utiles pour la construction de petits composants - presque programmes miniture. La différence est que vous n'avez pas besoin de pour les sortir et ils peuvent être branchés dans la plupart des scripts en toute simplicité - Juste une instruction require ou include en haut. Une classe décrit un «objet». Un objet est une collection d'objets plus petits, juste comme dans une classe.

Reference

0

Si vous pensez de vos objets comme des roches lourdes, qui pourrait être une bonne chose. Puisque php n'est pas très opaque par nature (à l'exception de certaines extensions par défaut), il y a assez de fonctions procédurales, environ 6000, n'est-ce pas?

Je vous encourage à continuer avec la POO. Des centaines de classes semblent cependant exagérées. Pour commencer, mettez tout ce dont vous avez besoin dans un objet, et divisez-le en sous-classes le cas échéant.

0

Il n'y a pas de réponse simple à cette question.En général, vous devriez vous en tenir soit à une approche fonctionnelle ou OO, une des choses intéressantes à propos de PHP par rapport à Java, par exemple, c'est qu'elle permet des fonctions comme des entités de première classe.

La chose la plus importante à retenir est que vous écrivez des programmes dans une langue et un style qui les rend lisibles par les êtres humains! Le fait que l'ordinateur puisse les analyser est plutôt une coïncidence.

Certes, la surcharge d'une méthode statique par rapport à une fonction ne devrait pas être prise en compte - et vous êtes définitivement coupable d'une optimisation prématurée. Si cela vous inquiète, pourquoi ne le mesurez-vous pas vous-même? Vous constaterez que si elle est plus lente, la différence est très faible - et ne devrait pas remplacer les objectifs principaux lors de l'écriture de code (ie ça devrait marcher, ça devrait être aussi clair que possible, ça ne devrait pas avoir de côté -effets).

+0

Existe-t-il des exemples de script OOP pur? J'aimerais en voir. – Shoe

+0

Non, car PHP n'est pas un langage OO ** pur ** (Java non plus). (pour les programmeurs Java qui ne sont pas d'accord, veuillez fournir une explication sur la façon dont les primitives et les points d'entrée d'exécution sont des OO purs). Cependant dans les limites de ceci il est possible d'écrire des applications de type OO - regardez par exemple les applications distribuées par le projet horde. – symcbean

5

N'utilisez pas OOP juste pour regrouper ensemble un ensemble de fonctions apparentées. Utilisez OOP pour avoir des représentations logiques de «choses» à états et sans état qui peuvent être manipulées, avoir des attributs ou être utilisées de diverses façons. Ne pas utiliser OOP juste parce que quelqu'un ici dit que vous devriez. Utilisez OOP car vous voyez l'avantage dans data encapsulation. N'utilisez pas OOP si vous pensez que cela rendra votre patron heureux.

Utilisez OOP parce que vous obtenez qu'un Tacoma est un passager est un véhicule. N'utilisez pas OOP jusqu'à ce que vous ayez au moins regardé les modèles de conception de Gang of Four - les avantages deviennent plus clairs.

Utilisez OOP parce que vous voulez fournir aux personnes qui développeront avec cette classe des interfaces faciles à utiliser.

Questions connexes