Les types

Les types

1 Introduction

Il y a plusieurs catégories de types en Php.

Tout d'abords les types scalaires : Les chaînes de caractères (string), les entiers (integer), les réels (float ou double) et les booléens.

Ensuite les types composés : les tableaux (array), les objets (object), les "callable" (callable) et les "iterable" (iterable).

Enfin les types spéciaux : NULL, ressource, mixed et void.

2 les types scalaires Les chaines Une chaîne de caractère est un suite d'octet contenu dans un tableau.

Sa longueur est contenue dans un entier, si vous êtes en 32 bit elle est limité à ... 2 Go !

Il n'y a aucune interprétation du contenue par le langage, contrairement au langage C une chaîne peut donc contenir un octet valant 0 (\x00).

De plus Php ne tient pas compte de l'encodage (il laisse ça aux fonctions des librairies qui traitent les chaînes de caractères) et donc les caractères accentués peuvent avoir différentes valeurs.

Les chaînes peuvent être délimitées plusieurs façons.

Tout d'abords par des guillemets.

Entre guillemets les contenu des variables est interprété, ainsi que les caractères d'échappement (ceux précédé de l'antislash \)

Exemple

<?php

$str = "une chaine simple";

$str2 = "une chaine avec un retour à la ligne";

$str3 = "$str suivi d'$str2 \n";

print $str3;

?>

pour le tester enregistrez le dans un fichier, par exemple ~/tmp.php puis dans un shell tapez php ~/tmp.php.

Le résultat devrait être :

$ php ~/tmp.php 
une chaine simple suivi d'une chaine avec un retour à la ligne 
$ 

La seconde façon de délimiter un chaîne c'est avec des apostrophes.

Dans ce cas les caractères d'échappements et les variables contenues ne sont pas interprétés. Il y a deux exceptions \\ et \' qui correspondent respectivement à l'antislash (\) et à l'apostrophe (').

<?php

$str = 'une chaine simple';

$str2 = 'une chaine sans un retour à la ligne';

$str3 = '$str suivi d\'$str2 \n';

print $str3;

?>

Le résultat devrait être

$ php tmp.php 
$str suivi d'$str2 \n$

Une troisième façon de délimiter une chaîne est la syntaxe heredoc (inspirée du shell). Elle permet des saisir un texte sur plusieurs lignes et le contenu est interprété (comme avec les guillemets).

Elle consiste à utiliser trois signes inférieurs suivi d'un label désignant la fin du texte. Ce label doit être placé en première colonne et suivi d'un point virgule.

Exemple :

<?php
$auteur = 'moi';
$str = <<<FIN
        un texte sur plusieurs
        lignes ecrit par: \n $auteur

FIN;
print $str;

?>

Le résultat devrait être

$ php tmp.php 
	un texte sur plusieurs
        lignes ecrit par: 
 moi
$

Notez que le nom la variable $auteur est interprétée et que le \n est converti en retour à la ligne.

L'inconvénient de cette solution c'est que le texte ne peut pas contenir le label suivi d'un point virgule en premier colonne. Cependant vous avec les choix du label donc c'est facilement contournable.

La dernière façon de délimiter une chaîne est appelée Nowdoc.

Elle fonctionne comme les guillemets simples et dispose d'une syntaxe similaire à la précédente. La différence c'est que le label est placé entre guillemet simple.

Voici l'exemple précédent 'converti' :

<?php
$auteur = 'moi';
$str = <<<'FIN'
        un texte sur plusieurs
        lignes ecrit par: \n $auteur
FIN;
print $str;

?>

et son résultat :

$ php tmp.php 
	un texte sur plusieurs
        lignes ecrit par: \n $auteur$

2 Les entiers

Il représente les nombres entiers signées ( ensemble mathématique ℤ ) et peuvent être exprimé dans plusieurs bases.

Sans précision c'est la base décimale usuelle qui est utilisée, avec le préfixe 0x c'est la base hexadécimale qui est prise en compte. Les nombres en octal sont préfixés par un zéro non significatif , ou à partir de PHP 8.1 par un zéro suivi d'un O ( 0o ou 0O ). Enfin le binaire est désigné grâce à 0b.

Exemple :

123              // base 10 classique
0x1A            // base 16 (hexadécimal)
0b0011100  // base 2 (binaire)
1_234_567  // Base 10 (notation php  ≥ 7.4)
0123           // Base 8 (Octal)
0o123         // Base 8 (Octal) à partir de php 8.1
0O123         // Base 8 (Octal) à partir de php 8.1

La valeur maximale des entiers dépend de la plateforme. Les constantes PHP_IN_MIN, PHP_INT_MAX et PHP_INT_SIZE permettent de connaître respectivement le nombre entier minimum, le maximum et la taille des entiers.

Le programme suivant vous les affichera pour votre plateforme, attention elles peuvent être différents entre les environnements de développement et de production.

<?php
  print PHP_INT_MIN."\n";
  print PHP_INT_MAX."\n";
  print PHP_INT_SIZE."\n";
?>

En cas de dépassement de capacité l'entier sera converti en nombre décimal.

Exemple :

<?php
$test = PHP_INT_MAX ;
print "$test\n";
var_dump($test);

$test += 1 ;
print "$test\n";
var_dump($test);
?>

Enfin on peut convertir un autre en format en entier en utilisant le transtypage et les mot clés int ou integer ou grâce à la fonction intvat()

Exemple :

echo (int) ( (0.1+0.7) * 10 ); 
echo (integer) ( (0.1+0.7) * 10 ); 
echo intval( (0.1+0.7) * 10 ); 

Les chaînes seront converties en entier uniquement si possible, c'est à dire si la chaîne représente un nombre. Dans le cas contraire ce sera zéro.

Exemple :

echo (int) ( (0.1+0.7) * 10 ); 
echo (integer) ( (0.1+0.7) * 10 ); 
echo intval( (0.1+0.7) * 10 ); 

Enfin false et NULL sont converti en 0 et true est convertie en 1.

3 Les flottants

Les nombres flottants (float) représentent les nombres désignés par "réels" en mathématique. C'est à dire les nombres avec des décimales.

Leurs syntaxes sont multiples :

<?php

$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
$d = 1_234.567; // à partir de PHP 7.4.0

?>

La précision dépend de la plateforme et la précision est limité.

Pour ce qui concerne les conversions , les chaînes seront convertis si elle correspondent à un format valide , les entiers peuvent aussi être convertis en float. Les autres types pourront être convertis en passant au préalable par un conversion en entier. Á condition que ce soit possible évidement.

Pour savoir si le résultat est NAN il faut utiliser la fonction is_nan().

Exemple :

<?php

$x = acos(8);

var_dump($x);
if($x == NAN) print "NAN 1";
if(is_nan($x)) print "NAN 2";


?>

4 Les booléens

Le booléen est type pouvant avoir seulement deux valeurs : vrai ou faux.

Ces deux valeurs sont disponibles sous le forme de constantes ̀trueetfalse`.

un autre type peut être converti en booléen grâce au transtypage (bool) ou (boolean) .

Dans ce cas les valeurs suivantes sont transformées en FAUX :

  • L'entier 0
  • les flottants valant 0
  • La chaîne "0"
  • Toute variable valant NULL
  • les Objet SimpleXML vide

Toutes les autres valeurs sont considérées comme vrai.

Quelques exemples :

(bool) 'chaine ' ; // vrai
(bool) 0 ; // faux

0 ==0 ; // vrai , c'est la comparaison qui est évalué

1 ; // vrai
Dernière modification le 11/12/2024 16:57:20