62 votes

Quand utiliser une classe contre une fonction en PHP

L'ampoule a encore du chemin à parcourir pour que cette...

J'aimerais vraiment un facile de comprendre l'explication de l'avantage d'utiliser une classe en php plus simplement à l'aide de fonctions.

Voici un exemple simple de la pensée, je vais avoir maintenant et je me demande si une classe est plus efficace:

Dire que j'ai un mini-calendrier widget que j'ai construit en php. Je suis en train de penser à propos de l'appel de la fonction miniCal('arrayVars1', 'var2'). Mais je pourrais le faire à deux reprises sur cette page. N'utiliser moins de ressources par l'utilisation d'une catégorie ici, de créer de nouvelles instances?

De quel arbre devrais-je être aboiements jusqu'ici, parce que je me sens comme en ce moment, l'arbre est un mur de briques...

55voto

Kaleb Brasee Points 25776

Les Classes sont utilisées pour représenter des données sous forme d'objets. Si vous représentez quelque chose comme les données d'un utilisateur, ou une offre de vente aux enchères, la création d'un objet Utilisateur ou AuctionBid objet le rend plus facile à conserver que les données, de les passer dans votre code, et de le rendre plus facilement compréhensible pour les lecteurs. Ces classes ont des attributs (champs de données comme les nombres, chaînes de caractères, ou d'autres objets) ainsi que les méthodes (fonctions que vous pouvez utiliser sur n'importe quelle classe).

Les Classes n'ont pas l'habitude d'offrir des avantages en termes de performance, mais ils ont que très rarement des effets négatifs non plus. Leur bénéfice réel est de rendre le code plus clair.

Je vous recommande de lire le PHP5 Orienté Objet guide de Programmation et le Wikipédia de la programmation orientée objet entrée.

39voto

John Conde Points 102874

Une chose commune à faire depuis PHP5 était de créer des classes qui agissent comme des bibliothèques. Cela vous donne l'avantage de l'organisation de votre fonctionnalité et de tirer avantage des fonctionnalités de classe comme __autoload();

Par exemple, imaginez que vous avez deux fonctions de cryptage et décryptage de données. Vous pouvez les envelopper dans une classe (appelons-le Chiffrement) et de faire d'eux des fonctions statiques. Ensuite, vous pouvez l'appeler comme cela (avis n de l'initialisation est nécessaire (c'est à dire $obj = new Chiffrement)):

$encrypted_text = Encryption::encrypt($string);

et

$decrypted_text = Encryption::decrypt($string);

Les avantages de ce produit sont:

  1. Votre fonctionnalité de chiffrement sont regroupées et organisées. Vous, et quelqu'un maintien du code, et de savoir où trouver votre fonctionnalité de chiffrement.
  2. C'est très clair et facile à lire. Bon pour la maintenabilité.
  3. Vous pouvez utiliser __autoload() pour inclure les classe automatiquement pour vous. Cela signifie que vous pouvez l'utiliser comme si c'était une fonction intégrée.
  4. Car elle est contenue dans sa propre classe et propre fichier, il est réutilisable et peut facilement être porté à de nouveaux projets.

8voto

Julian Points 548

L'utilisation de classes est utile si vous avez besoin qu'une fonction soit appelée plusieurs fois.

5voto

John Doe Points 39

Les fonctions sont la viande de votre demande et les classes sont plus comme la plaque. C'est le désordre de manger de la viande sans la plaque. Mais si vous n'avez pas de viande, vous n'avez pas de repas.

Si vous avez 500 fonctions dans vos applications, vous allez probablement vouloir le groupe à moins de la moitié d'entre eux dans les plus grandes collections pour faciliter l'accès. Vous pouvez concevoir commun des conventions de nommage ("Encryption_Encrypt", "Encycryption_Decrypt", etc.)...mais les classes sont tout simplement plus facile. Si vous avez seulement 12 fonctions dans votre application, vous pourriez probablement survivre avec seulement 1 ou classes, le cas échéant.

Je n'ai pas souvent besoin de stocker des données/propriétés dans les classes. J'ai tendance à stocker dans la base de données. Je n'ai donc pas profiter de cet aspect de classes très souvent.

Les Classes permettent également de polymorphisme, ce qui peut être utile. Si vous avez plusieurs classes qui sont très similaires, ou plusieurs variations sur une catégorie, vous pouvez enregistrer le code...sans avoir à construire des multi-usage, Frankenstein-comme la classe.

3voto

Tyler Carter Points 30030

J'ai une liste de lieux que vous serait d'utiliser la programmation orientée objet-Classes de Style dans ma réponse à cette question: http://stackoverflow.com/questions/2035449/why-is-oop-hard-for-me/2035482#2035482

Fondamentalement, chaque fois que vous voulez représenter un objet qui a des choses en elle. Comme une base de données de la variable qui a un lien unique. Donc, je voudrais stocker que je peux donc, assurez-vous que l' mysql_query utilise la connexion correcte à chaque fois:

class MySQL extends Database
{
    public function connect($host, $user, $pass, $database)
    {        
        $this->connection = mysql_connect($host, $user, $pass);
        $this->select_db($database);
    }

    public function query($query)
    {
        return mysql_query($query, $this->connection);
    }

    public function select_db($database)
    {
        mysql_select_db($database);
    }    
}

Ou peut-être vous voulez créer un Formulaire, vous pouvez faire un objet de formulaire qui contient une liste d'entrées et tel que vous voulez être à l'intérieur de la forme lorsque vous décidez d'afficher:

class Form
{
    protected $inputs = array();
    public function makeInput($type, $name)
    {
         echo '<input type="'.$type.'" name="'.$name.'">';
    }

    public function addInput($type, $name)
    {
         $this->inputs[] = array("type" => $type,
                "name" => $name);
    }

    public function run()
   {
       foreach($this->inputs as $array)
       { 
          $this->makeInput($array['type'], $array['name'];
       }
    }
}

$form = new form();

$this->addInput("text", "username");
$this->addInput("text", "password");

Ou que quelqu'un d'autre, une personne:

class Person{

    public $name;
    public $job_title;
    // ... etc....

}

Toutes les raisons de créer des classes qu'ils représentent quelque chose qui a des propriétés comme un nom ou un titre d'emploi, et peut avoir des méthodes, telles que l'affichage d'un formulaire.

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