web-dev-qa-db-fra.com

Qu'est-ce que l'encapsulation avec un exemple simple en php?

Qu'est-ce que l'encapsulation avec un exemple simple en php?

31
Moon

L'encapsulation consiste simplement à encapsuler des données dans un objet. Le terme "encapsulation" est souvent utilisé indifféremment avec "dissimulation d'informations". Wikipedia a un joli article de travers .

Voici un exemple de le premier lien dans un recherche Google pour 'encapsulation php' :

<?php

class App {
     private static $_user;

     public function User( ) {
          if( $this->_user == null ) {
               $this->_user = new User();
          }
          return $this->_user;
     }

}

class User {
     private $_name;

     public function __construct() {
          $this->_name = "Joseph Crawford Jr.";
     }

     public function GetName() {
          return $this->_name;
     }
}

$app = new App();

echo $app->User()->GetName();

?>
35
Jeremy Logan

L'encapsulation est le mécanisme qui lie le code et les données qu'il manipule, et les protège des interférences extérieures et des utilisations abusives. Le regroupement de données et de méthodes dans une seule unité (appelée classe) est appelé encapsulation. L'avantage de l'encapsulation est qu'il effectue la tâche à l'intérieur sans vous inquiéter.

L'encapsulation est un mécanisme de protection pour votre classe et votre structure de données. Cela rend la vie beaucoup plus facile. Avec Encapsulation, vous avez un contrôle pour accéder et définir les paramètres et méthodes de classe. Vous avez un contrôle pour indiquer quelle partie est visible par les étrangers et comment définir les paramètres de vos objets. 

Paramètres de classe d'accès et d'établissement  

(Bonne façon)

<?php

class User
{
    private $gender;

    public function getGender()
    {
        return $this->gender;
    }

    public function setGender($gender)
    {
        if ('male' !== $gender and 'female' !== $gender) {
            throw new \Exception('Set male or female for gender');
        }

        $this->gender = $gender;
    }
}

Vous pouvez maintenant créer un objet à partir de votre classe d’utilisateur et définir des paramètres de genre en toute sécurité. Si vous définissez quelque chose qui ne va pas pour votre classe, il lancera une exception. Vous pensez peut-être que cela n'est pas nécessaire, mais lorsque votre code augmente, vous aimeriez voir un message d'exception significatif plutôt qu'un problème logique délicat dans le système, sans exception. 

$user = new User();
$user->setGender('male');

// An exception will throw and you can not set 'Y' to user gender
$user->setGender('Y');

(Mauvaise manière)

Si vous ne suivez pas les rôles d'Encapsulation, votre code ressemblera à ceci. Très difficile à maintenir. Notez que nous pouvons définir n'importe quoi sur la propriété de sexe de l'utilisateur.

<?php

class User
{
    public $gender;
}

$user = new User();
$user->gender = 'male';

// No exception will throw and you can set 'Y' to user gender however 
// eventually you will face some logical issue in your system that is 
// very hard to detect
$user->gender = 'Y';

Méthodes de classe d'accès

(Bonne façon)

<?php

class User
{
    public function doSomethingComplex()
    {
        $this->doThis(...);
        ...
        $this->doThat(...);
        ...
        $this->doThisExtra(...);
    }

    private function doThis(...some Parameters...)
    {
      ...
    }

    private function doThat(...some Parameters...)
    {
      ...
    }

    private function doThisExtra(...some Parameters...)
    {
      ...
    }
}

Nous savons tous que nous ne devrions pas créer de fonction avec 200 lignes de code, mais plutôt en une fonction individuelle qui rompt le code et améliore sa lisibilité. Maintenant, avec l’encapsulation, vous pouvez rendre ces fonctions privées, cela signifie qu’elles ne sont pas accessibles par des personnes extérieures. Plus tard, si vous souhaitez modifier une fonction, vous serez très heureux si vous voyez le mot-clé privé. 

(Mauvaise manière)

class User
{
    public function doSomethingComplex()
    {
        // do everything here
        ...
        ...
        ...
        ...
    }
}
9
Saman Shafigh

L'encapsulation est un moyen de stocker un objet ou des données en tant que propriété dans un autre objet, de sorte que l'objet externe ait le contrôle total sur l'accès à la donnée ou à l'objet interne.

Par exemple

class OuterClass
{
  private var $innerobject;

  function increment()
  {
    return $this->innerobject->increment();
  }
}

Vous avez une couche supplémentaire autour de l'objet encapsulé, ce qui permet à l'objet externe de contrôler comment accéder à l'objet interne. Ceci, associé à la création de l'objet intérieur/propriété private, active les informations masquées.

7
thomasrutter

Les gens semblent confondre les détails de l'orientation des objets avec l'encapsulation, un concept beaucoup plus ancien et plus large. Une structure de données encapsulée

  • peut être passé avec une seule référence, par exemple incrément (myDate) plutôt que incrément (année, mois, jour)
  • a un ensemble d'opérations applicables stockées dans une seule unité de programme .__ (classe, module, fichier, etc.)
  • n'autorise aucun client à voir ou à manipuler ses sous-composants EXCEPT en appelant les opérations applicables

Vous pouvez effectuer l’encapsulation dans presque toutes les langues et vous obtenez d’énormes avantages en termes de modularisation et de facilité de maintenance.

3
Graham Perkins
/* class that covers all atm related opetation */
class ATM {

    private $customerId;
    private $atmPinNumber;
    private $amount;

    // Varify ATM card user
    public function verifyCustomer($customerId, $atmPinNumber) {
        ... function body ...
    }

    // Withdraw Cash function
    public function withdrawCash($amount) {
        ... function body ...
    }

    // Retrive mini statement of our account
    public function miniStatement() {
        ... function body ...
    }
}

Dans l'exemple ci-dessus, nous avons déclaré toutes les propriétés de la classe ATM (variable) avec un modificateur d'accès privé. Cela signifie simplement que la propriété de classe ATM n'est pas directement accessible à l'utilisateur final du monde extérieur. Ainsi, l'utilisateur final du monde extérieur ne peut pas modifier ou mettre à jour directement la propriété de la classe.

Le seul moyen possible de modifier la propriété de la classe (données) était une méthode (fonction). C’est pourquoi nous avons déclaré les méthodes de classe ATM avec modificateur d’accès public. L'utilisateur peut transmettre les arguments requis à une méthode de classe pour effectuer une opération spécifique.

Cela signifie que les utilisateurs n'ont pas tous les détails de la mise en œuvre pour la classe ATM. C’est simplement connu sous le nom de masquage de données.

Référence: http://www.thecreativedev.com/php-encapsulation-with-simple-example/

3
Saifullah khan

Encapsulation : - emballage des données dans une seule unité. on peut aussi dire cacher les informations des détails essentiels. Exemple : Vous avez un téléphone portable, une interface qui vous permet d’interagir avec votre téléphone portable et qui vous permet d’utiliser les services d’un téléphone portable. Mais le fait de travailler dans un téléphone cellulaire est caché. vous ne savez pas comment cela fonctionne en interne.

2
Qazi Ahmad

Le regroupement jusqu'à la donnée et la méthode ensemble dans une seule unité (c'est-à-dire une classe) est appelé Encapsulation . Encapsulation revient à enfermer dans une capsule. Cela englobe les opérations et les données liées à un objet dans cet objet . L'encapsulation est comme votre sac dans lequel vous pouvez conserver votre stylo, votre livre, etc. Cela signifie que c'est la propriété d'encapsuler des membres et des fonctions.

<?php
 class YourMarks
  {
   private $mark;
   public Marks
  {
   get { return $mark; }
   set { if ($mark > 0) $mark = 10; else $mark = 0; }
  }
  }
?>

Je donne un autre exemple de la vie réelle (utilisation quotidienne) qui est «opération de télévision». De nombreux peuples utilisent la télévision au quotidien.

Il est encapsulé avec une couverture et nous pouvons fonctionner avec une télécommande sans avoir besoin d’ouvrir la télévision et de changer de chaîne ..__ Ici, tout est privé, sauf la télécommande, de sorte que tout le monde puisse y accéder sans avoir à modifier ou modifier les éléments de la télévision.

2
Neha Sinha

L'encapsulation est le processus de masquage des données de l'objet du monde extérieur et son accès est limité aux membres de la classe.

2
serono denis dayoh

L'opposé de l'encapsulation serait quelque chose comme passer une variable à chaque méthode (comme un descripteur de fichier à chaque méthode liée au fichier) ou des variables globales.

2
VVS

Simplement je préfère que ce soit la visibilité de la propriété et de la méthode de votre classe. Par exemple- - Publique - privé - protégé

Prenons un exemple concret d'encapsulation. 

 class MyClass{
    private $name;

    public function showName($newName){
        $this->name = $newName;
        return $this->name;
    }
 }


 //instantiate object

 $obj = new MyClass();
 echo $obj->showName("tisuchi");

Dans ce cas, encapsulation signifie que nous limitons certaines propriétés. Comme, nommer la propriété, nous ne pouvons pas accéder de l'extérieur de la classe. D'autre part, nous pouvons accéder à la fonction publique intitulée showName () avec un paramètre privé.

Simplement ce que je préfère de l'encapsulation is- 

visibilité de votre propriété et de votre méthode.

Cependant, si vous avez l’intention de comprendre davantage l’encapsulation, je me réfère à mon tutoriel spécial basé sur l’encapsulation. 

http://tisuchi.com/object-oriented-php-part-3-encapsulation-php/

J'espère que votre concept sera plus clair. S'amuser!

1
tisuchi

En gros, c’est ainsi que nous définissons la visibilité de nos propriétés et méthodes. Lorsque vous créez des classes, vous devez vous demander quelles propriétés et méthodes peuvent être accessibles en dehors de la classe. Disons que nous avions une propriété nommée foo. Si une classe étend votre classe, est-il autorisé à manipuler et accéder à foo? Et si quelqu'un crée une instance de votre classe? Sont-ils autorisés à manipuler et à accéder à foo?

0
Zaheer Babar

L'encapsulation indique simplement comment vous souhaitez que vos objets/méthodes ou propriétés/variables soient visibles dans votre application. Par exemple,: .....__

class ecap {

public $name;

private $id;

protected $tax;

}

Si vous souhaitez accéder à des propriétés privées ou protégées, vous devez utiliser les méthodes getter et setter de votre classe qui seront accessibles de l'extérieur de votre classe. Cela signifie que vous ne pouvez pas accéder à vos propriétés privées ou protégées directement de l'extérieur de votre classe, mais que vous pouvez utiliser par n'importe quelle méthode. Nous allons jeter un coup d'oeil-

dans la classe, ajoutez la méthode suivante:

class ecap 
{
 public function userId(){
 return $this->id;
 }
} 

et nous pouvons y accéder comme:

 $obj = new ecap();
 echo $obj->userId();
0
Usama Muneer