Différences entre versions de « Php object »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 15 : Ligne 15 :
 
}
 
}
 
</source>
 
</source>
== Les attributs ==
+
== Attributs et visibilité ==
 
L'objet précédent est vide, nous allons lui ajouter quelques attributs:
 
L'objet précédent est vide, nous allons lui ajouter quelques attributs:
 
<source lang="php">
 
<source lang="php">
Ligne 25 : Ligne 25 :
 
}
 
}
 
</source>
 
</source>
 +
Notez le '''public''' qui précède la liste des attributs, il sert à définir la visibilité.
 +
 +
La visibilité d'un attribut ou d'une méthode indique à partir d'où on peut avoir accès à telle méthode ou tel attribut.
 +
 +
Il y a 3 types de visibilité : public, private (privé) et protected (protégé)
 +
 +
*Accès public : c’est le plus simple. Si un attribut ou une méthode est public, alors on pourra avoir a ccès à cet attribut ou cette méthode depuis n'importe où, autant depuis l'intérieur de l'objet (dans les méthodes qu'on a créées, on aura accès aux éléments public), mais aussi depuis l'extérieur.
 +
*Accès privé : il impose quelques restrictions. On a ura accès aux attributs et méthodes que depuis l'intérieur de la classe, c'est-à-dire que seul le code écrit à l'intérieur de la classe fonctionnera. Les héritier n’ont pas accès à un élément privé.
 +
*Accès protégé : C’est comme l’accès privé sauf qu’un tel attribut (ou méthode) est accessible aussi par les classes qui héritent de la classe mère.
 +
 +
Ceci est la base de l'encapsulation.
 +
 
== Constructeur ==
 
== Constructeur ==
 
Le constructeur est la méthode qui permet de créer l'objet lorsque l'on utilise le mot clé ''new'' (que nous verrons plus tard).
 
Le constructeur est la méthode qui permet de créer l'objet lorsque l'on utilise le mot clé ''new'' (que nous verrons plus tard).

Version du 14 mai 2014 à 20:37

Introduction

Concrètement, un objet est une structure de données valuées et cachées qui répond à un ensemble de messages. Cette structure de données définit son état tandis que l'ensemble des messages qu'il comprend décrit son comportement :

  • Les données — ou champs — qui décrivent sa structure interne sont appelées ses attributs ;
  • L'ensemble des messages forme ce que l'on appelle l'interface de l'objet ; c'est seulement au travers de celle-ci que les objets interagissent entre eux. La réponse à la réception d'un message par un objet est appelée une méthode (méthode de mise en œuvre du message) ; elle décrit quelle réponse doit être donnée au message.

Certains attributs et/ou méthodes (ou plus exactement leur représentation informatique) sont cachés : c'est le principe d'encapsulation. Ainsi, le programme peut modifier la structure interne des objets ou leurs méthodes associées sans avoir d'impact sur les utilisateurs de l'objet.

Wikipedia

Implémentation

Définition

La définition d'un objet en PHP se fait grâce au mot clé class. Nous allons placer le code suivant dans un fichier nommé Rectangle.class.php (notez le .class.php).

class Rectangle{
    ...
}

Attributs et visibilité

L'objet précédent est vide, nous allons lui ajouter quelques attributs:

class Rectangle {
    
    public $x, $y, $largeur, $hauteur;

    ...
}

Notez le public qui précède la liste des attributs, il sert à définir la visibilité.

La visibilité d'un attribut ou d'une méthode indique à partir d'où on peut avoir accès à telle méthode ou tel attribut.

Il y a 3 types de visibilité : public, private (privé) et protected (protégé)

  • Accès public : c’est le plus simple. Si un attribut ou une méthode est public, alors on pourra avoir a ccès à cet attribut ou cette méthode depuis n'importe où, autant depuis l'intérieur de l'objet (dans les méthodes qu'on a créées, on aura accès aux éléments public), mais aussi depuis l'extérieur.
  • Accès privé : il impose quelques restrictions. On a ura accès aux attributs et méthodes que depuis l'intérieur de la classe, c'est-à-dire que seul le code écrit à l'intérieur de la classe fonctionnera. Les héritier n’ont pas accès à un élément privé.
  • Accès protégé : C’est comme l’accès privé sauf qu’un tel attribut (ou méthode) est accessible aussi par les classes qui héritent de la classe mère.

Ceci est la base de l'encapsulation.

Constructeur

Le constructeur est la méthode qui permet de créer l'objet lorsque l'on utilise le mot clé new (que nous verrons plus tard).

public function Rectangle($x, $y, $largeur, $hauteur){
    $this->x = $x;
    $this->y = $y;
    $this->largeur = $largeur;
    $this->hauteur = $hauteur;
}

A partir de maintenant on peut instancier notre objet rectangle, quoique, il ne sait pas faire grand chose pour le moment.

Ajout d'une méthode

Nous allons doter notre objet Rectangle de la capacité de se dessiner. Pour cela nous allons ajouter une fonction draw qui renverra la chaîne de caractères représentant le rectangle.

class Rectangle {
    ...

    public function draw() {
        $result = "";
        for($i = 1; $i < $this->y; $i ++) {
            $result += ".<br/>";
        }
        for($i = 0; $i < $this->hauteur; $i ++) {
            for($j = 1; $j < $this->x; $j ++) {
                $result += ".";
            }
            for($j = 0; $j < $this->largeur; $j ++) {
                $result += "*";
            }
            $result += "<br/>";
        }
        return $result;
    }
}

On peut remarquer que:

  • l'accès aux attribut de l'objet se fait grâce à $this->;
  • $this fait référence à l'objet instancié et peut être utilisé uniquement à l'intérieur de la classe;
  • il n'y a pas besoin de déclarer une variable avant de pouvoir l'utiliser (comme en C par exemple).

Appel de l'objet

Créons une page PHP nommé main.php qui appellera notre objet et affichera le rendu

<?php

include __DIR__.'/Rectangle.class.php';

$rectangle = new Rectangle(5, 3, 19, 9);
echo $rectangle->draw();

?>

On peut remarquer que:

  • l'instanciation de l'objet se fait grâce au mot clé new;
  • l'accès au fonctions et attribut de l'objet se fait grâce à ->;


Et voici le résultat:

# php -f main.php
.
.
....*******************
....*******************
....*******************
....*******************
....*******************
....*******************
....*******************
....*******************
....*******************