51 votes

PHP: Exemple de POO du monde réel

Je suis en train d'apprendre la programmation orientée objet. Le soi-disant "monde réel" des exemples dans les livres que je lis ne m'aident pas.

Tous les exemples comme Pet, Car, Human ne sont pas de m'aider plus. J'ai besoin de VRAIS exemples de la VIE que, comme l'enregistrement, l'utilisateur les pages de profil, etc.

Un exemple:

$user->userName = $_POST['userName'];//save username
$user->password = $_POST['password'];//save password
$user->saveUser();//insert in database

J'ai aussi vu:

$user->user = (array) $_POST;

où :

private $user = array();

Détient toutes les informations dans un tableau.

Et à l'intérieur de la même classe se trouve

$user->getUser($uid);
// which sets the $this->user array equal to mysqli_fetch_assoc() using 
//the user id.

Existe-il des exemples concrets de mise en œuvre de la programmation orientée objet dans les différentes applications php (inscription, connexion, compte d'utilisateur, etc)?

87voto

Peter Bailey Points 62125

La POO n'est pas vraiment sur la façon dont une seule classe ressemble et fonctionne. C'est la manière dont les instances d'une ou de plusieurs classes à travailler ensemble.

C'est pourquoi vous voyez donc beaucoup d'exemples basés sur des "Voitures" et "les Gens" parce qu'ils font un travail vraiment bon d'illustrer ce principe.

À mon avis, leçons les plus importantes dans la programmation orientée objet sont l'encapsulation et le polymorphisme.

Encapsulation: Couplage de données et la logique qui utilise les données ensemble dans un concis, logique Polymorphisme: La capacité d'un objet à regarder et/ou se comporter comme un autre.

Un bon exemple du monde réel de ce serait quelque chose comme un répertoire d'itérateur. Où est ce répertoire? C'est peut-être un dossier local, c'est peut-être à distance comme un serveur FTP. Qui sait!

C'est l'encapsulation:

abstract class DirectoryIterator
{
  protected $root;

  public function __construct( $root )
  {
    $this->root = $root;
  }

  abstract public function getAll();
}

class LocalDirectoryIterator extends DirectoryIterator
{
  public function getAll()
  {
    // logic to get the current directory nodes and return them
  }
}

class FtpDirectoryIterator extends DirectoryIterator
{
  public function getAll()
  {
    // logic to get the current directory nodes and return them
  }
}

Chaque classe/objet est responsable de sa propre méthode de récupération d'une liste de répertoire. Les données (variables) sont couplés à la logique (fonctions de classe i.e, méthodes) qui utilisent la dta.

Mais l'histoire n'est pas finie - rappelez-vous comment je l'ai dit, la programmation orientée objet est la façon dont les instances de classes à travailler ensemble, et pas toute seule classe ou d'un objet?

Ok, donc permet de faire quelque chose avec ces données d'impression à l'écran? Assurez-vous. Mais comment? Le HTML? Texte brut? RSS? Nous allons remédier à cela.

<?php

abstract class DirectoryRenderer
{
  protected $iterator;

  public function __construct( DirectoryIterator $iterator )
  {
    $this->iterator = $iterator;
  }

  public function render()
  {
    $dirs = $this->iterator->getAll();
    foreach ( $dirs as $dir )
    {
      $this->renderDirectory( $dir );
    }
  }

  abstract protected function renderDirectory( $directory );
}

class PlainTextDirectoryRenderer extends DirectoryRenderer
{
  protected function renderDirectory( $directory )
  {
    echo $directory, "\n";
  }
}

class HtmlDirectoryRenderer extends DirectoryRenderer
{
  protected function renderDirectory( $directory )
  {
    echo $directory, "<br>";
  }
}

Ok, maintenant nous avons un couple de la classe des arbres pour traverser et le rendu des listes de répertoire. Comment les utilisons-nous?

// Print a remote directory as HTML
$data = new HtmlDirectoryRenderer( new FtpDirectoryIterator( 'ftp://example.com/path' ) );
$data->render();

// Print a local directory a plain text
$data = new PlainTextDirectoryRenderer( new LocalDirectoryIterator( '/home/pbailey' ) );
$data->render();

Maintenant, je sais ce que vous pensez, "Mais Pierre, je n'ai pas besoin de ces grands de la classe des arbres pour cela!" mais si vous pensez que vous êtes à côté de la question, comme je soupçonne que vous avez été avec "Voiture" et "les Gens" exemples. Ne pas se concentrer sur les détails de l'exemple - au lieu d'essayer de comprendre ce qui se passe ici.

Nous avons créé deux classes d'arbres où l'on (DirectoryRenderer) utilise l'autre (DirectoryIterator) dans un de la manière prévue - c'est souvent désigné comme un contrat. Une instance de DirectoryRenderer ne se soucie pas de quel type d'instance d' DirectoryIterator il reçoit, ni les instances de DirectoryIterator se soucient de leur être rendus.

Pourquoi? Parce que nous avons conçu de cette façon. Ils suffit de la brancher dans l'autre et le travail. C'est de la POO en action.

9voto

RockyBalboa Points 51

L'achat d'un livre comme "PHP et Mysql tous les jours des applications pour les Nuls".

Sa vieille, je sais [2005], mais il montre concepts de Connexions de l'Utilisateur, Forum, Chariots, etc, à la fois Procédurale et Orientée Objet avec Mysqli.

Il m'a aidé à apprendre Orientée Objet en PHP, j'ai étudié beaucoup. Bien la peine de l'argent.

La programmation orientée objet est un peu comme le regroupement des éléments de votre programme en réutilisables morceaux. Ce n'est pas si difficile d'être honnête avec vous, l'idée de l'emballage de vos fonctions dans des classes.

Monde réel mini exemple de la programmation orientée objet trucs ci-dessous:

LA CLASSE DE BASE DE DONNÉES
LES SESSIONS DE CLASSE
CLASSE WEBFORMS
CLASSE E-MAIL

CLASSE de COMPTES (Exemple des Fonctions ci-dessous)
FONCTION SELECTACCOUNT
FONCTION CHECKPASSWORD
FONCTION CHECKUSERNAME
FONCTION CREATEACCOUNT

J'espère que vous continuez à elle, PHP 6 sera ré-ingénierie à l'appui de la programmation orientée objet, plus que jamais.

Bonne Chance!

1voto

mooware Points 945

Comme astropanic dit, vous pouvez jeter un œil au code source d'un bon framework PHP ou de la bibliothèque. Je recommande Zend Framework, il est très modulaire et a un grand, de conception professionnelle. Je dirais que c'est un très bon morceau de l'orienté objet en PHP code.

Pourtant, je pense que ce n'est pas facile d'apprendre à partir d'un énorme morceau de code de production, puisqu'il n'était pas vraiment fait pour vous enseigner quoi que ce soit. Mais si vous voulez du monde réel orienté objet code PHP, Zend Framework ou Symfony, ou peut-être CakePHP) est probablement la voie à suivre.

1voto

kristian nissen Points 839

Je vous conseille de rester à l'écart de tout cadre en ce moment, si vous ne connaissez pas la programmation orientée objet, en creusant en zend ou de tout autre cadre, ce serait trop.

PHP POO, c'est d'arrêter drôle... comme ha ha drôle, parce que c'est pris en charge, mais PHP n'est pas un langage de programmation orientée objet comme java ou c#.

Petit exemple juste pour souligner ma déclaration:

// define class
class User {
// define properties and methods
public $name = "";
}
// instantiate class
$user = new User; // or new User() or new user, it's all the same
echo $user->name;

mais si vous voulez faire de la programmation orientée objet "à la volée", vous pouvez effectuer les opérations suivantes:

$user = (object) array('name' => 'Peter');

et puis

$user->name;

mais vous pouvez utiliser de la POO comme en java ou en c#, mais pas à la même adresse et avoir à l'esprit, les systèmes populaires comme wordpress et drupal ne sont pas pures de la programmation orientée objet! mais vous pouvez le faire à l'héritage et d'autres que le classement de la programmation orientée objet trucs en PHP.

1voto

blakroku Points 51

Je n'ai pas allés loin en PHP POO, mais plus je la en le plus plus il devient facile. Les objets les exemples sont juste là pour vous faire comprendre comment la programmation orientée objet de travaux. Je comprends et en travers avant cela, la POO est juste sur les propriétés et méthodes ( normal des variables et des fonctions). J'ai programmé vrai OOP moi-même appliquer les exemples de mes tutoriels et ne doit pas nécessairement être dans le monde réel. Qui est juste comme été nourris cuillère et vous ne serait jamais à comprendre la programmation orientée objet et serait facile à oublier. Mes conseils, apprendre à comprendre. Si vous comprenez, vous pouvez faire quelque chose et permettrait de rendre compte de la puissance de la POO. J'ai téléchargé ce livre et je pense que vous devriez aussi. Mais c'est comme quelqu'un bâtiment de vos applications pour vous...

Voici un lien pour le livre de PHP et de Mysql tous les jours des Applications Pour les Nuls

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