Intéressant : $foo = (binary) 3

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 mai 2007, 01:19

Hey!

J'ai une colle pour vous, est-ce que vous savez ce que donne ce code sous PHP 5.2 ?
$foo = (binary) 3;
var_dump($foo);
Si vous repondez

Code : Tout sélectionner

string(2) "11"
...c'est que vous êtes malin. Mais si vous répondez

Code : Tout sélectionner

string(1) "3"
...c'est que vous connaissiez déjà la réponse :lol:

Son inclusion dans PHP 5.2.1 m'avait échappée et je pensais que l'idée avait été abandonnée, mais il semblerait bien que l'opérateur de transtypage (binary) ait été rétroporté de PHP 6. (mais toujours pas de clavicogyres en vue) Et au cas où vous ne soyez pas déjà familier, il sert à indiquer qu'une chaîne est de type binaire. Il faut savoir que sous PHP 6 il existe une distinction entre les chaînes représentant du texte et celles représentant des données binaires (le contenu d'un fichier image, par exemple) et le résultat de certaines fonctions peut s'en trouver modifié. Sous PHP 6, on a donc deux types de données différents : (string) et (binary). Sous PHP 5, (binary) n'est qu'un synonyme de (string) mais il permet dès aujourd'hui d'assurer la compatilibité ascendante de ses scripts. Enfin, on est pas pressé non plus, hein.

À noter également, l'addition du préfixe "b" pour indiquer une chaîne binaire:
$binaire = b'contenu';
Voilà, c'était mon info du jour. :P

ViPHP
ViPHP | 5924 Messages

27 mai 2007, 01:26

binary pour des chaines de caractère ?
Le mot est plutôt mal choisi, non ?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 mai 2007, 03:42

Tu noteras que je me suis bien gardé d'utiliser le terme "chaîne de caractères" et préfère imaginer (binary) comme une "chaîne d'octets". En fait je crois qu'il serait plus juste d'abandonner le terme de chaîne pour les données binaires afin d'éviter toute confusion, mais je ne sais pas quels sont les plans de l'équipe qui s'occupent des docs de PHP.

ViPHP
ViPHP | 5924 Messages

27 mai 2007, 13:10

Ouais mais je suis choqué par

Code : Tout sélectionner

string(1) "3"
D'une part par le type string, d'autre part par le fait que php interprète le contenu comme une chaine de caractère au lieu de nous donner le contenu exact, c'est à dire la représentation binaire.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 mai 2007, 22:05

Ben on parle de PHP 5, les (string) sont en fait des (binary), il ne fait pas la différence. D'ailleurs, j'ai pas testé mais sous PHP 6 ça devrait afficher à peu près la même chose

Code : Tout sélectionner

binary(1) "3"
Le truc du dessus au sujet de "11" c'était pour ceux qui auraient deviné à tort que (binary) transforme de la base-10 en binaire, alors qu'il sert à transformer des séries d'octets en codepoints.

Eléphant du PHP | 377 Messages

27 mai 2007, 23:55

euh, désolé pour le HS, mais
(mais toujours pas de clavicogyres en vue)
c'est quoi un clavicogyre ? :oops:
Petit scarabée deviendra grand

Mammouth du PHP | 505 Messages

28 mai 2007, 00:16

c'est une "culture" d'une autre époque

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

28 mai 2007, 00:51

Ce sont les armes du programmeur : transtypage ! rétroportage ! clavicogyre !