Marc Adamus
Art Wolfe
Charlie Waite
Programmation PHP/Exceptions
Tester l'existence.
Pour éviter les warnings de variables inexistantes il vaut mieux les initialiser au début. Si toutefois cela s'avère impossible, on recourt à des tests sur les fonctions suivantes pour le faire :
empty().
Permet de savoir si une variable est définie et si contient une valeur. Son comportement s'adapte au type de la variable. Cela équivaut à :
ou
ou
try... catch.
Tout comme en Java, la est assurée par un bloc codice_1. Cela permet à un script de poursuivre son exécution malgré les erreurs (ex : panne réseau), et ainsi de ne pas bloquer l'utilisateur sur une page blanche ou en anglais destinée au développeur.
Ces interruptions sont représentées par des classes qui héritent toutes du type codice_2, qui a deux classes filles : codice_3 et codice_4.
Exemples.
try {
 echo '1 / 2 = ' 1/2;
 echo '3 / 0 = ' 3/0; // instruction qui déclenchera l'exception
 echo '2 / 1 = ' 2/1; // cette instruction ne sera pas exécutée à cause de la précédente
catch (Exception $e) {
 echo $e->getMessage(); // afficher le message lié à l'exception
Il n'est donc pas nécessaire de prévoir ce qui peut interrompre le programme pour s'en prémunir et poursuivre l'exécution en fonction.
La classe de gestion des erreurs nommée "Exception" est gracieusement mise à votre disposition par l’interpréteur dans les versions ultérieures à PHP 5.0. 
Autre exemple d’utilisation :
class Humain
 var $age;
 function __construct($combien)
 $this->age = $combien;
 try {
 if ($this->age<0)
 throw new Exception('Un peu jeune');
 if ($this->age>200)
 throw new Exception('Un peu vieux');
 } catch (Exception $e) {
 echo $e->getMessage();
 return;
//Retournera un message d'erreur
$humain = new Humain(700);
$humain = new Humain(-3);
//Sans erreur
$humain = new Humain(16);
Par ailleurs, il est possible de créer ses propres classes d'exceptions, et de modifier les exceptions natives PHP avec codice_5.
Recréer une exception ou une erreur.
Les "Throwable" PHP sont immutables, pour les modifier il faut donc les recréer. Pour faciliter cela, ils possèdent depuis PHP7 une méthode codice_6, dont le résultat injecté en troisième argument du constructeur d'un autre, permet de cloner l'objet. Ex :
 try {
 crash();
 } catch (\Exception $e) {
 throw new \Exception('Nouveau message + ancien : '.$e->getMessage(), $e->getCode(), $e->getPrevious());
NB : la classe "Throwable" n'est pas instanciable directement.
trigger_error().
Cette fonction lance une exception du type placé en second paramètre, dont certains peuvent stopper l'exécution du programme. Par exemple :
 trigger_error('Message d'erreur', E_USER_ERROR);
Affiche : "ErrorException. User Error: Message d'erreur".
La liste des types d'erreur est disponible sur http://php.net/manual/fr/errorfunc.constants.php.
Logs.
Affichage d'une trace lisible.
Afin de clarifier la trace de l'exécution des scripts, il peut être utile de formater celle-ci avec la balise "<pre>" :
if ($debogage) {
 print '<pre>';
 var_dump(scandir('.'));
 print '</pre>';
NB : on rappelle que les commandes codice_7 et codice_8 permet d'afficher à l'écran toutes les erreurs et avertissements.
Voici une manière de n'afficher les erreurs que lors du débogage :
if ($debogage) {
 error_reporting(E_ALL);
} else {
 error_reporting(0);
Pour créer une bonne gestion des erreurs, partez du principe que l'utilisateur est imprévisible, et qu'il va justement faire ce qu'il ne faut pas (). Envisagez toutes les possibilités et trouvez-y une solution, en testant les exceptions (ex : caractères d'échappements ou symboles non ASCII comme des sinogrammes pour voir s'ils s'affichent bien).
debug_backtrace et debug_print_backtrace.
Ces fonction affichent automatiquement la trace de l'exécution menant à elles.
echo '<pre>'; debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);echo '</pre>';
$logFile = fopen('debug.log', 'a+');
fwrite($logFile, json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)).PHP_EOL);
fclose($logFile);
throw.
Si l'affichage de la trace doit être suivi d'une interruption du programme, utiliser :
throw new \Exception('Trace');
Exception::getTraceAsString().
Si l'exception ne surgit pas avec un throw, on peut afficher la trace depuis avec sa méthode :
echo $e->getTraceAsString();
Fichier de log maison.
Bien souvent on ne peut pas afficher les logs dans le navigateur ou rapidement via le logeur existant, donc il faut recourir à la création d'un nouveau fichier de log temporaire :
$logFile = fopen('debug.log', 'a+');
fwrite($logFile, $maVariable.PHP_EOL);
fclose($logFile);
Symfony.
Depuis une commande Symfony, on peut afficher des logs en console :
$output->writeln('Update complete');
Mais le mieux est d'utiliser la bibliothèque Monolog (compatible PSR-3), pour que les logs soient horodatés et s'enregistrent dans var/log/ (puisque les commandes peuvent être lancées par cron et donc sans affichage en console). De plus, Monolog est configurable pour afficher en plus ces logs en console (ce qui est fait par défaut sur la v3.3 dans config/packages/dev/monolog.yaml).
 composer require symfony/monolog-bundle
Pour booster ses performances, on peut le régler ainsi dans monolog.yaml :
monolog:
 use_microseconds: false

Programmation PHP/La programmation orientée objet

Programmation PHP/Les cadriciels/CakePHP

Programmation PHP/DOMPDF
DOMPDF permet de générer des fichiers PDF à partir d'une page HTML. C'est une alternative à HTML2PDF, qui lui est basé sur .

Programmation PHP/JSON
Bibliothèque PHP-JSON.
Le format de données JavaScript Object Notation (JSON) peut être utilisé en PHP grâce à différentes fonctions natives depuis PHP 5.2.0.
Installation (pour PHP < 5.2).
Linux.
 apt-get install php5-json
Windows.
 extension=json.so
json_encode().
Cette fonction convertit un objet PHP en JSON exploitable en JavaScript. Ex :
$tableau = array('colonne 1' => 'valeur 1', 'colonne 2' => 'valeur 2', 'colonne 3' => 'valeur 3');
echo json_encode($tableau);
Options.
Par ailleurs, les erreurs de json_encode() sont accessibles avec codice_1 ou codice_2. Ex :
$a = json_encode($monTableau);
if (json_last_error() === JSON_ERROR_INF_OR_NAN) {
 $this->logger->error(json_last_error_msg());
 $a = json_encode($monTableau, JSON_PARTIAL_OUTPUT_ON_ERROR);
Pour afficher dans un format plus lisible par un humain (indenté), utiliser codice_3.
json_decode().
Convertit une chaine de caractères JSON en :
La gestion des erreurs est semblable à celle de codice_4.
PEAR Services_JSON.
Le framework PEAR possède aussi un package Services_JSON contenant des .php avec des exemples, à télécharger en tant que JSON.tar.gz sur http://pear.php.net/pepr/pepr-proposal-show.php?id=198.
La classe "Services_JSON" de JSON.php peut s'utiliser comme décrit dans Test-JSON.php.

Construire des communs/Contribution/Chat