4. Qui parle?
Damien Séguy
PHP Québec, AFUP
Expert PHP et MySQL :
sécurité, audit
Auteur des documentations
rédacteur en chef
http://www.nexen.net/
5. Au hasard
rand() et mt_rand()
array_rand() : extrait des lignes d'un tableau
Extrait les clés!
shuffle() : mélange un jeu de cartes
str_shuffle : Mélange une chaîne
6. Au hasard
Array
<?php (
$a = range('a','d'); [0] => c
shuffle($a); [1] => d
[2] => b
print_r($a); [3] => a
)
print_r(array_rand($a,3)); Array
(
print str_shuffle('abcdef'); [0] => 0
// eabdcf [1] => 1
?> [2] => 3
)
8. Tableaux SQL?
<?php
$array = array("1", "MySQL", 1, "PHP", "PHP");
$array = array_count_values($array);
asort($array);
print_r($array);
?>
Array
sort r u
(
[1] => 2
[PHP] => 2 ksort kr uk
[MySQL] => 1
)
asort ar ua
9. Tableaux SQL
Array
(
array_multisort() : tri sur
[0] => 2
plusieurs tableaux en même
[1] => 3
temps
[2] => 4
[3] => 5
Fonctionne comme ORDER BY )
Array
<?php (
$ar1 = array(5,4,3,2); [0] => d
$ar2 = array('a','b','c','d'); [1] => c
array_multisort($ar1, $ar2); [2] => b
array_multisort($ar1, SORT_ASC, SORT_INT, [3] => a
$ar2); )
?>
10. Étranges tris?
Est ce que ça cloche?
mysql> SELECT id, ordre FROM table
ORDER BY ordre ASC;
+----+------------+
| id | ordre |
+----+------------+
| 1 | premier |
| 2 | deuxième |
| 3 | troisième |
| 4 | quatrième |
+----+------------+
11. Étranges tris
mysql> CREATE TABLE `test` (
`id` tinyint unsigned,
`ordre` enum(‘premier’,’deuxième’,
’troisième’,’quatrième’),
) ENGINE=MYISAM;
Enum est une chaîne et un nombre
Utilisé en interne comme entier
Affiché par défaut comme une chaîne
12. Variables MySQL
Disponibles depuis la pré-histoire
Gérée au niveau des connexions
Détruites à la déconnexion
Pas de concurrence
Stockage local de scalaires
Permet de se passer de PHP
22. Toute cette dynamite..
Métamoteur
Gabarits
Gestion de structures dynamiques
SOAP
Personnalisation de bibliothèques
23. Magie de l'objet
__autoload() : Juste à temps
<?php
// php.ini auto_prepend
function __autoload($classe) {
include 'classes/' . $classe . '.php';
}
$objet = new MaClasse();
$objet2 = new MaClasse2();
?>
24. Magie de l'objet
__toString() :
transforme un objet en chaîne
toArray(), __toInteger()?
<?php
class db {
function __toString() {
return "La connexion à ".$this->hote." est ".
(is_null($this->mid ? 'active' : 'inactive' )."";
}
}
$db = new db();
PHP Catchable fatal error: Object of class mysqli
echo $db;
could not be converted to string
?>
25. Magie de l'objet
__sleep() et __wakeup()
Stocke un objet en session
Avant serialize()
class db {
// .....
function __sleep() {
unset($this->mid);
}
function __wakeup() {
$this->mid = new mysqli("host", "user", "secret", "base");
}
// .....
}
26. Buffer de sortie
Intercepte le contenu
Evite le bogue 'already sent'
Nettoyez : tidy
<?php
ob_start("ob_gzhandler");
Compressez : gz echo "Hello
";
setcookie("c", "v");
Cachez : ce sein que
ob_end_flush();
?>
28. Connexions HTTP
PHP Enregistre l'état de la connexion
0 Normal; 1 Annulé; 2 expiré
ignore_user_abort() évite les interruptions
connexion_status() surveille l'état
29. Register_shutdown
Semblable au __destruct()
Fonction exécutée à l'extinction du script
Fermeture des ressources
Plus pratique que ignore_user_abort
pour une bibliothèque
30. Variables
var_export : Crée le code pour une variable
Pratique pour les tableaux de configuration
Optimise ces tableaux
<?php
array (
0 => 5,
$array = array(5,4,3,2);
1 => 4,
2 => 3,
print var_export($array, true);
3 => 2,
)
?>
31. Assertions
tests dans les scripts
assertion sont gérées par directive
Par défaut, activé
Facile à supprimer echo/var_dump
Développement par contrat
33. Assertions
<?php
function assert_callback($script,$line, $message){
echo 'Un problème est survenu dans le script
<b>', $script,'</b>,
à la ligne <b>', $line, '</b> : <br />'
. $message;
exit;
}
?>