Question

Il y a beaucoup de débats sur l'opportunité de la programmation orientée objet est bon ou non. Mais, en utilisant OOP dans Php est plus lent. Serait-il un bon métier d'utiliser la programmation procédurale et la vitesse plus rapide et OOP avec une vitesse plus lente (puisque les classes doivent être engagées à chaque chargement de page et les grands sites commencent à devenir lent).

Plus important encore, serait-il bon d'envelopper des choses dans une classe et d'utiliser des fonctions statiques ou serait-il préférable de simplement avoir de nombreuses fonctions se trouvant avec un préfixe ex:. Wp_function ()

Était-ce utile?

La solution

Oui, il est presque toujours une bonne idée d'utiliser la POO. En effet, OOP est un style de codage, et les styles de codage pour la plupart peuvent facilement être transférés accross langues.

Les gens n'utilisent pas de codage styles parce qu'ils utilisent une langue. Les gens utilisent des styles de codage parce que le style de codage offre de bonnes méthodes pour faire des choses qu'ils jugent souhaitables. Par conséquent, tant que les éléments de base sont là (héritage, propriétés de classe, etc.), il sera toujours viable d'écrire dans ce style de codage.

Non, en utilisant les fonctions de procédure pour y accéder est probablement pas une bonne idée. En effet, vous aurez probablement à faire quelque chose comme ça pour maintenir l'état.

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

Ceci est une mauvaise idée car il crée une tonne d'état global.

Autres conseils

Si la raison pour laquelle vous êtes inquiet sur l'utilisation OO avec PHP est la vitesse, la peur ne: PHP est un langage lent tout autour. Si vous faites quelque chose qui est assez gourmandes en temps processeur pour la perte de vitesse de l'utilisation des objets à la matière, vous ne devriez pas utiliser PHP du tout.

En ce qui concerne les fonctions statiques, c'est un choix de conception, mais je voudrais pécher par excès d'éviter les classes composées entièrement de fonctions statiques. Il n'y a vraiment aucun avantage à ce sur préfixes, et en utilisant une construction juste parce qu'il est il n'y a pas une bonne idée.

Les mêmes arguments sur la performance ont été faites sur Objective C et C ++ dans la journée. Et la réponse à ce problème est de tirer parti de la mémoire et de puissance de traitement disponible qui devient continuellement plus, mieux et plus vite.

Oui, OO nécessite plus de ressources pour fonctionner. Mais les avantages de l'utilisation OO l'emportent sur le coût du matériel $$ (qui est susceptible d'être négligeable) de soutenir les applications OO.

Il est, cependant, une bonne chose d'être préoccupé par les performances du logiciel. Cependant la recherche sous le capot de la procédure oo vs comme point de départ est un peu égaré. Vous devez être concentré sur l'écriture de code efficace pour commencer, si la procédure ou OO (et les deux sont pertinentes).

Gardez à l'esprit que même si PHP peut ne pas être la plate-forme la plus rapide là-bas (Java, par exemple, lance sa crosse) PHP est utilisé pour alimenter certains des plus de trafic sites lourds sur Internet:. À savoir Facebook

Si vous avez d'autres doutes sur PHP et OO, il suffit de regarder à Zend et Magento (basé sur Zend). Magento est une très plate-forme de ressources, l'utilisation de la mémoire peut être plus de 36 Mo par exemple. Cependant, la plate-forme elle-même est capable de gérer des millions de visites. En effet, un environnement de serveur configuré correctement avec une portion saine des ressources matérielles font tous les avantages de l'utilisation OO éclipsent largement le coût du serveur lui-même. Mais dans un monde d'ordinateurs en cluster, pas en utilisant la puissance et la mémoire de traitement (responsable) à votre disposition est - à mon humble avis -. Folie clinique

À mon humble avis, les développeurs PHP ne devraient pas essayer d'aller uniquement une direction. (Procédure vs orienté objet) Dans certains cas, tout ce que vous avez besoin est quelques fonctions globales, d'autres fois il est plus avantageux d'utiliser des objets. Ne pas essayer de forcer tout d'une façon ou l'autre, faire preuve de souplesse et d'utiliser ce qui fonctionne le mieux pour chaque situation.

Je suis en désaccord avec la réponse de Chacha102.

Une réponse appropriée à cette question remplirait plusieurs livres -. Sans parler d'un poste de 20 ligne ici

Les deux approches ont leurs avantages et leurs inconvénients. Je recommande à tous ceux qui veulent se considérer comme un bon programmeur pour avoir une expérience significative dans la programmation procédurale, non procédurale et orientée objet. En plus d'expérience avec différentes méthodes telles que SCRUM, cascade et RAD.

En ce qui concerne la pertinence phps pour OO vs codage procédural, certainement les racines de la langue sont dans ce dernier (mais notez que Java et ASP sont plutôt hybrides que de véritables langages OO).

Peronally, je tends à écrire du code de procédure quand je dois produire quelque chose qui est soit très simple ou doit avoir son comportement à thouroughly défini et prévisible. Toutefois, lorsque l'écriture de code complexe où le comportement varie grandement à l'exécution, je trouve OO être beaucoup plus efficace en termes de temps de développement - en dépit de la conception étant basée autour d'un ensemble fini de cas d'utilisation

.

Pour faire valoir que vous devriez toujours écrire le code de procédure car il fonctionne plus rapidement que le code OO:

1) n'est pas nécessairement vrai 2) ne tient pas compte totalement le coût relatif du temps de développement vs coûts de matériel

  

serait-il bon d'envelopper des choses dans une classe et d'utiliser des fonctions statiques

Étant donné que les espaces de noms sont maintenant disponibles en PHP, c'est une façon vraiment désordre pour éviter les collisions d'espace de noms et non quelque chose que je recommande.

C.

Il n'y a vraiment pas de réponse parfaite car elle dépend tant de variables inconnues, et il ne doit pas être tout ou rien.

Par exemple, si vous divisez votre application dans le modèle MVC, vous pourriez avoir votre modèle soit OO mais garder le contrôleur plus simplistes de la procédure.

Vous pouvez utiliser des classes comme un moyen de simplement groupe des fonctions statiques communes, ou vous pouvez le prendre beaucoup plus loin dans le modèle d'enregistrement actif.

Si vous construisez un petit formulaire en ligne une seule page qui tire un POST hors dans un courriel, vous avez vraiment pas besoin OO -. De peur que vous incluez peut-être une classe de messagerie existant à l'effet de levier

Personne ne peut vous donner des conseils appropriés sans comprendre le projet que vous prenez sur.

Cela dit, si votre seule préoccupation est la vitesse, alors OO être un peu plus lent. Et il y a beaucoup de choses sournoises que vous pouvez faire en même PHP procédural pour imiter certains des gains OO. Mais à moins que vous prenez un projet énorme, les frais généraux ajouté ne sera jamais à grand-chose. Et au moment où vous avez un projet énorme, les avantages de OO pourraient l'emporter sur les inconvénients de ses frais généraux.

J'étais curieux de moi-même. Malheureusement, après avoir changé mon code de procédure à oop j'ai couru quelques repères et pas à l'avance.

Voici le code de référence.

class game{
  function maxp($val){
    return max(0,pow($val,0.5));        
  }
}

$game = new game;

for($i=0;$i<100000;$i++){
  $game->maxp(100);
  //game::maxp(100);
}

résultats de POO variaient entre 0,13 et 0,2 secondes;

Résultats de procédure se situaient entre 0,08 et 0,1 secondes.

Les résultats sont demeurés stables sur une bonne longueur de temps.

Je vous encourage à exécuter vos propres tests.

php 5.4.3

POO a plus de mérites que ses de-fond. Voir PHP POO, quels sont les avantages? . Voir aussi POO vs PP en PHP .

Oui que votre application se développe .. (et il), il vous permettra d'économiser de nombreuses heures de frustration. Et vous répéter (copier coller le code dans tous les sens) ..:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top