Page 1 sur 1

Intéressant : $foo = (binary) 3

Posté : 27 mai 2007, 01:19
par Hubert Roksor
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

Posté : 27 mai 2007, 01:26
par Sékiltoyai
binary pour des chaines de caractère ?
Le mot est plutôt mal choisi, non ?

Posté : 27 mai 2007, 03:42
par Hubert Roksor
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.

Posté : 27 mai 2007, 13:10
par Sékiltoyai
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.

Posté : 27 mai 2007, 22:05
par Hubert Roksor
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.

Posté : 27 mai 2007, 23:55
par Shrell
euh, désolé pour le HS, mais
(mais toujours pas de clavicogyres en vue)
c'est quoi un clavicogyre ? :oops:

Posté : 28 mai 2007, 00:16
par titerm
c'est une "culture" d'une autre époque

Posté : 28 mai 2007, 00:51
par Hubert Roksor
Ce sont les armes du programmeur : transtypage ! rétroportage ! clavicogyre !