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.
Comme dans tout langage les variables ont un contexte, en PhP on peut les réduire simplement à 4 portées différentes :
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.
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
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
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.
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 ::
Le mot-clef self permet d'utiliser une méthode ou une propriété de la classe elle-même.
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.
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" } }
Dans une fonction ce mot clef vaut le nom de la fonction ou on se trouve.
Exemple :
function maFonction() { echo __FUNCTION__; # Affichera "maFonction" }
Nom du fichier ou cette constante est utilisée.
++ : 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;
Plutôt qu'une longue explication un exemple sera plus parlant :
function a(¶m){ 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.
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 !
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 :)