Php : mécanismes a connaitre

Php : mécanismes a connaitre

Description

Php est un langage interprété simple dans son ensemble. Il recèle néanmoins certaines astuces ou subtilités ou tout simplement des mots clef vraiment utiles que l'on ne connait pas forcement quand on commence à travailler. Je vais essayer de vous donner ici quelques unes de ces subtilités.

Les notions de base a bien comprendre

La visibilité des variables

Comme dans tout langage les variables ont un contexte, en PhP on peut les réduire simplement à 4 portées différentes :

  • Je suis dans une fonction => Je suis disponible que dans cette fonction
  • Je suis une globale => Je suis disponible partout
  • Je suis une propriété de classe => Je suis disponible en fonction de mon type de déclaration :
    • private => Que dans la classe
    • protected => Dans la classe et dans ses enfants
    • public => Directement depuis une instance de la classe
  • Le scope => Un scope est un contexte d'exécution et plus particulièrement de visibilite des variables et des fonctions. C'est une notion complexe aussi je vous laisse lire ceci pour mieux la comprendre : http://www.projectperfect.com.au/info_define_the_scope.php

Les designs patterns

Ce sont des méthodes de programmation purement logique pour répondre a un problème donne.
Il faut les connaitre, il faut savoir que ça existe et il faut se renseigner dessus.
A lire à ce propos.

L'operateur ::

La résolution de portée.

Si vous voulez utiliser des fonctions ou des variables statiques il sera obligatoire et pour plus d'explications : http://php.net/manual/fr/language.oop5.paamayim-nekudotayim.php

Les mots clés méconnus ou peu utilisés

const et la fonction define

Ces deux mots clefs vous permettront de déclarer les variables dont vous pouvez avoir besoin partout dans votre code.

Notez que avec le mot clef const vous pourrez définir des variables complexes comme des objets ce que vous ne pourrez pas faire avec define qui se contente des type simples.

Pour plus d'informations : http://stackoverflow.com/questions/2447791/define-vs-const

global

Un mot clef vraiment utile, soit le code suivant :

$a = 10;
function toto()
{
    global $a; # Ici $a vaudra 10
}

Le fait de mettre global devant la variable $a va préciser agir comme le mot clef extern en c, c'est à dire que PhP va regarder si une variable de ce nom a été déclaré quelque part dans votre code et si elle existe ce sera celle la qui sera utilisée.

static

Souvent mal compris ce mot clef est très utile.
Il va vous permettre de déclarer des variables ou des fonctions dites statiques et cela implique que vous n'aurez pas à instancier un objet pour y accéder !
Souvent il est plus intéressant de faire une fonction statique ou déclarer une variable statique et des fois ça sera même indispensable notamment si vous comptez par exemple implémenter un Singleton (la je vous laisse découvrir les design pattern).

Ce que vous devez retenir c'est que pour accéder à une fonction ou une variable statique vous devrez utiliser l'opérateur ::

self

Le mot-clef self permet d'utiliser une méthode ou une propriété de la classe elle-même.

parent

Là, c'est la notion de l'héritage qui est en jeu et je vous conseille de lire ceci :
http://php.net/manual/fr/keyword.extends.php

A vous de comprendre la notion d'héritage. Ce n'est plus du PhP mais de la programmation orientée objet.

Les constantes dynamiques

__CLASS__

Dans une classe ce mot clef vaut le nom de la classe ou on se trouve.
Exemple :

class maClasse
{
    public function __construct()
    {
        echo __CLASS__; # Affichera "maClasse"
    }
}

__FUNCTION__

Dans une fonction ce mot clef vaut le nom de la fonction ou on se trouve.
Exemple :

function maFonction()
{
    echo __FUNCTION__; # Affichera "maFonction"
}

__FILE__

Nom du fichier ou cette constante est utilisée.

Les raccourcis

++ : Incrémentation de la variable de 1 selon son type
-- : Décrémentation de la variable de 1 selon son type
+=, -=, *=, /= : les opérations de bases appliquées directement du cote gauche

Exemple : $var a = 10; $a *= 10 donnera 100;

L'operateur & devant une variable

Plutôt qu'une longue explication un exemple sera plus parlant :

function a(&param){
   param / 2;
}
$b = 10;
a($b); # La fonction a reçu la variable par référence et non par copie, 
          # son contenu est directement modifie par la fonction !
          # $b vaut 5 après l'appel.

Le $$

Non non ce n'est pas un barbarisme mais une beauté du langage interprété :)
Nous savons tous que une variable se déclare de la manière suivante en PhP : $nom_de_ma_variable.
Maintenant un cas pratique : soit une variable $var = 'toto';

En utilisant $ devant une variable contenant une chaine PhP va tout simplement agir comme suit et ce grâce a la priorité des opérateurs (chaque opérateur a une priorité d'interprétation lorsque les code est analysé).

$var => contient la chaine 'toto'
$ => ce qui suit est une variable
Conclusion : $$var = que contient la variable de nom $var soit que contient la variable $toto !

Utilité : Créer du code générique principalement, grâce à ce mécanisme on va pouvoir faire de jolies choses en évaluant le contenu de variable dynamiquement !

Les structures conditionnelles

Le foreach

Vraiment TRES utile !
Je ne vais pas trop m'étendre dessus mais c'est comme un for mais en mieux :)

Exemples :

$arr = array(1, 2, 3);
foreach ($arr as $value)
{
     echo $value;
}
# Ceci affichera : 123
foreach ($arr as $index => $value)
{
    echo $index.':'.$value;
}
# Ceci affichera : 011223 

et pour plus de précisions :

$arr = array(
        'clef1' => 1,
        'clef2' => 2,
        'clef3' => 3
        );
foreach ($arr as $index => $value)
{
    echo $index.':'.$value;
}
# Ceci affichera : clef1:1clef2:2clef3:3

Je pense que c'est assez clair ^^

Pour finir du côté des structures utiles, je vous conseille de vous renseigner sur le "switch" et le "do / while".

Si vous devez optimiser la rapidité de votre code :
Utilisez = = = plutôt que = = c'est l'opérateur d'égalité stricte qui est plus rapide
mais attention :
true === true est vrai alors que 1 === true est faux, pourtant 1 == true est vrai (l'égalité stricte se base aussi sur le type)

Le switch est plus rapide qu'une batterie de if, c'est toujours bon a savoir :).

Un for est traduit en while alors utilisez un while (Bon la j'avoue c'est vraiment minime).

Voila ce tutoriel évoluera certainement avec le temps, j'espère vous avoir donné quelques informations intéressantes :)

Ce document intitulé « Php : mécanismes a connaitre » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.