Le but de cet article est de regrouper quelques exemples de PHP dont le résultat peut paraitre déconcertant à première vue.
Exemple 1
1 2 3 4 |
Le résultat:
1 2 3 4 5 6 |
La première boucle ne fait aucune modification sur le tableau. Cependant $v se voit assigné la référence de chaque élément de $array, donc à la fin de la première boucle $v est en fait une référence vers $array[2]. Aussi quand la deuxième boucle commence $v est déjà une référence vers $array[2] donc chacune des valeur va être copié dans le dernier élément du tableau, ce qui donne a, b, b. On peut résoudre ce problème en faisant un unset() sur $v entre les deux boucles.
Exemple 2
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Le résultat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Il fallait simplement savoir que depuis PHP5 une assignation d’objet est une référence par défaut, nous sommes donc censé faire $b = clone $a. Plus d’informations ici.
Exemple 3
1 2 3 |
Le résultat:
1 | 42 |
$v va prendre la valeur v_1 car file_exists(__FILE__) retournera forcément true, __FILE__ étant une constante magique, en affichant la variable ayant comme nom v_1 on affichera donc la valeur 42.
Exemple 4
1 2 3 | $str = 'Z99'; $str++; echo $str; |
Le résultat:
1 | AA00 |
Ici il est marrant de se rendre compte que nous pouvons itérer sur des caractères, plus simplement si $str vaut ‘a’, $str++ vaut ‘b’ et ainsi dessuite. PHP suit les conventions de Perl pour la gestion des opérateurs arithmétiques, et non pas celle du C. Plus d’informations ici.
Répondre
Merci pour la petite distraction du vendredi :)
C’est vraiment à mourir de rire !
@Guillaume oui ça l’est. J’ai eu du mal à garder mon sérieux en écrivant cet article :p
Quelqu’un pourrait m’expliquer pourquoi ce code fonctionne :
if("test"==0){ echo "ok"; }merci ^^
Oui, dans la comparaison il cast ‘test’ en integer, tu aurais pu donner l’exemple var_dump(‘test’==0); qui est plus parlant. Regarde avec un var_dump((int)’test’); (int(0)), donc oui 0 est bien égal à 0 :)
Dans ce cas de figure utilise l’opérateur ‘===’.
http://fr3.php.net/manual/fr/language.operators.comparison.php
Effectivement. Comportement bizarre.
Non rien de plus normal, tu devrais vraiment lire cette page http://fr3.php.net/manual/fr/language.operators.comparison.php ;)
Le PHP c’est le bien :D
Quand on comprend, ça parait logique ;)
Il est clair que la gestion dynamique des types peut dérouter ceux qui n’ont pas l’habitude ^^
Tu dois etre pas normal comme mec en fait
Quelqu’un pour me #singsincode-r
le refrain de » je t’aime / moi non plus » ?
[ " je vais, je vais et je viens .. ]♫
Ta gueule Lambday.
Omagad, ça a l’air super chiant. :/
Tout ce que tu ne comprends pas n’est pas chiant :o
(Exemple: Moi)
@nvvachardes : moi aussi je t’aime.