59 votes

Pourquoi Utiliser PHP POO plus de Fonctions de Base et Quand?

Il y a quelques posts sur ce sujet, mais je n'ai pas bien obtenir quand utiliser Orientée Objet de codage et quand utiliser programmatique fonctions dans un include. Quelqu'un aussi m'a indiqué que la POO est très lourd à exécuter, et fait plus de charge de travail. Est-ce exact?

Disons que j'ai un gros fichier avec 50 fonctions, pourquoi, je tiens à appeler ces dans une classe? et pas par function_name(). Devrais-je passer et créer un objet qui contient toutes mes fonctions? Quel sera l'avantage ou spécifiques différence? Quels avantages apporte-t-il de code de la POO en php ? La modularité?

44voto

Majd Taby Points 743

Dans beaucoup de scénarios, de la procédure de programmation est tout simplement parfait. À l'aide OO pour le plaisir d'utiliser, il est inutile, surtout si vous êtes juste à la fin avec la GOUSSE d'objets (plaine-vieux-données).

La puissance de OO provient principalement de l'héritage et le polymorphisme. Si vous utilisez des classes, mais ne jamais utiliser l'une de ces deux concepts, vous n'avez probablement pas besoin d'utiliser une classe à la première place.

Un des plus beaux endroits de l'OMI OO brille dans, permet de vous débarrasser de commutateur-sur-type de code. Considérer:

function drive($the_car){

  switch($the_car){

    case 'ferrari':
      $all_cars->run_ferrari_code();
    break; 
    case 'mazerati':
      $all_cars->run_mazerati_code();
    break; 
    case 'bentley':
      $all_cars->run_bentley_code();
    break; 

  }

}

avec sa OO alterantive:

function drive($the_car){

  $the_car->drive();

}

Polymorphisme sera de permettre le bon type de "conduite", basée sur les informations d'exécution.

13voto

jerebear Points 3256

Je vais essayer de garder ma réponse comme une outre, parce que les réponses par Majd Taby et Coobird sont vraiment bons.

J'ai surtout une procédure programmeur depuis plusieurs années et n'a pas de lutte contre la programmation orientée objet de la programmation, mais jamais vraiment vu beaucoup de pertinence...jusqu'à ce que j'ai commencé à travailler dans une équipe et que la construction de plus important et de projets complexes.

La programmation orientée objet brille vraiment, à mon avis, si vous avez besoin d'écrire maigre, facilement maintenable code pour les applications les plus complexes. Et vous l'esprit, pas dans toutes les situations, mais il y a certains où les de procédure ne fonctionnera pas bien.

La plupart de mes exemples d'implémentations de la programmation orientée objet sont pour les projets où j'ai eu plusieurs choses qui étaient tous liés, mais toutes légèrement différentes. Les Sites avec beaucoup de formes, de beaucoup d'utilisateurs, beaucoup de produits etc.

Ils ont tous le même comportement noms comme print(), update(), etc...mais en les encapsulant comme des objets et de varier les méthodes de mise en œuvre, dans les cours que je peux faire mon code au moment de l'exécution très simple et propre sur tout le site. Également, et celui-ci a été la clé, malgré le fait d'avoir des comportements différents, j'ai pu travailler avec différents objets à l'aide de la même méthode appels tout au long de l'ensemble de l'application. Il permet à un second développeur de travailler sur la mise en œuvre effective pendant que je travaille sur une code.

Je ne sais pas si cela aide tout mais en parlant comme quelqu'un qui a été dans votre situation il y a pas longtemps, j'aime la programmation orientée objet.

12voto

coobird Points 70356

À l'aide d'une approche de programmation orientée objet plutôt que d'une procédure de programmation dans un programme n'a pas vraiment d'dépendent de la langue (que ce soit en PHP ou pas), mais sur le type de problème que vous essayez de résoudre.

(Je vais juste utiliser de pseudo dans mes exemples que je ne suis pas trop familier avec PHP.)

Par exemple, si vous avez un programme où vous êtes simplement en effectuant un tas de fonctions dans l'ordre, puis de procédure va être bien. Par exemple, si c'est une simple manipulation de la chaîne de programme, une approche procédurale devrait suffire:

perform_truncation(my_string, 10)
to_upper(my_string)
perform_magic(my_string, hat, rabbit)

Toutefois, si vous allez faire face à de nombreux différents éléments (tels que des fichiers, ou toute autre représentation d'objets), puis une approche orientée-objet serait mieux.

Par exemple, si vous avez eu un tas d' Cars et voulait drive, puis dans la procédure, vous pouvez faire quelque chose le long de la ligne de:

drive_car(first_car)
drive_car(second_car)

D'où aussi, en programmation orientée objet, l' Car peut conduire lui-même:

RedCar myRedCar();
BlueCar myBlueCar();

myRedCar.drive();
myBlueCar.drive();

Et, comme chaque voiture est une classe différente, leur comportement peut être défini différemment. En outre, ils peuvent être à la fois les sous-classes ou Car ils peuvent avoir des fonctionnalités communes.

Il vient vraiment à le type de problème qui ne fait d'une approche procédurale de mieux que orientée objet et vice-versa.

À côté de la question procédurale ou orientée objet, il peut être une sorte de "code de l'odeur" d'avoir un fichier source avec de nombreuses fonctions. Cela peut aussi être dit sur les classes qui contiennent beaucoup de fonctionnalités qui peuvent être mieux réalisées dans des fonctions dans des classes séparées.

Ici, le problème peut être du code de l'organisation plutôt que de se décider à choisir procédurale ou orientée objet de la programmation. L'organisation des fonctions dans les fichiers sources distincts peut-être ce qui est nécessaire ici abandon de l'approche procédurale de l'écriture du programme.

Après tout, il ya beaucoup de programmes écrits dans la programmation procédurale approche qui est bien écrit et facile à entretenir.

6voto

Volksman Points 1146

Disons que j'ai un gros fichier avec 50 fonctions, pourquoi je veux l'appeler ces dans une classe? et pas par function_name(). Devrais-je passer et créer un objet qui contient toutes mes fonctions?

Le déplacement de la programmation orientée objet ne doivent pas être considérés comme un simple changement dans la façon dont vous décrivez ci-dessus.

La programmation orientée objet nécessite une manière complètement différente de penser la programmation qui implique le recâblage de votre cerveau. Comme recâblage un cerveau n'est pas du jour au lendemain beaucoup de gens ne sont pas disposés à s'exposer au nécessaire processus de recâblage. Malheureusement, le recâblage va prendre un investissement en temps et en effort: la recherche, de tutoriels, d'essai et d'erreur.

- Il vraiment implique de prendre du recul et de l'apprentissage sur les concepts de la programmation orientée objet, mais le retour sur investissement sera bien la peine de parler comme quelqu'un qui est passé par ce processus dans le pré www jours.

Après "get it" et suivez la OOP meilleures pratiques dans votre quotidien, vous serez à dire aux autres comment votre la programmation la vie a changé pour le mieux.

Une fois que vous comprenez vraiment de la programmation orientée objet, vous avez répondu à votre propre question.

5voto

VirtuosiMedia Points 11293

J'ai écrit un billet de blog, il y a un moment qui pourrait vous aider dans la compréhension de la différence: Procédure contre la POO Expliqué

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X