Expertise (5/5)
J'utilise PHP depuis plus de 15 ans. Initialement, je développais des services WEB qui s'intégraient au sein de grands systèmes d'information. Puis, progressivement, pour des besoins personnels, j'ai utilisé le framework ZEND (développement de sites pour des particuliers). J'ai aussi développé (en PHP) de nombreux greffons pour le moteur de réseau social ELGG, ainsi que pour le CMS Joomla.
Quelques packages Composer.
J'ai écrit, il y a quelques années déjà, des modules pour PHP4. Concrètement, il s'agit de librairies dynamiquement changeables. À l'époque, j'ai développé, en particulier, un module qui implémentait un algorithme de chiffrage particulier. De nos jours, il n'est guère nécessaire de développer ses propres modules.
Généralités
L'exemple de code ci-dessous présente un module très simple qui exporte une fonction. Cette fonction effectue la somme des deux arguments qui lui sont fournis en argument.
Déclaration du module (newfunc.h)
Implémentation du module (newfunc.c)
Makefile
HTML
Résultat
Passage des paramètres de type scalaire
Le code ci-dessous illustre le fait que les arguments de la (nouvelle) fonction PHP sont passés par valeur, et non par adresse.
ou (code équivalent)
HTML
Résultat. Remarquez que la valeur de la variable "a" n'a pas changé.
Utilisation des chaînes de caractères
Documentation :
One thing you must know is that ALL string returned by a PHP function must have been allocated using emalloc(). PHP will free it (using "efree"), so if you did not use emalloc ... you are in big trouble.
There are two kinds of memory in this program. Memory which is returned to the parser in a variable and memory which you need for temporary storage in your internal function. When you assign a string to a variable which is returned to the parser you need to make sure you first allocate the memory with either emalloc or estrdup. This memory should NEVER be freed by you, unless you later, in the same function overwrite your original assignment (this kind of programming practice is not good though).
For any temporary/permanent memory you need in your functions/library you should use the three emalloc(), estrdup(), and efree() functions. They behave EXACTLY like their counterpart functions. Anything you emalloc() or estrdup() you have to efree() at some point or another, unless it's supposed to stick around until the end of the program, otherwise there will be a memory leak. The meaning of "the functions behave exactly like their counterparts" is if you efree() something which was not emalloc()'ed nor estrdup()'ed you might get a segmentation fault. So please take care and free all of your wasted memory. One of the biggest improvements in PHP 3.0 will hopefully be the memory management.
Implémentation du module (newfunc.c)
HTML
Résultat
Il arrive que vous deviez convertir une série de fichiers en UTF8. Le script Perl suivant effectue cette tâche. Il convertit tous les fichiers PHP présents dans un répertoire donné en UTF8.
L'envoi de fichier vers un serveur peut parfois dérouter les débutants... Ce code très simple illustre la procédure à suivre.
PHP simple
Framework ZEND
HTML
Exemple
Tables MySql
La figure ci-dessous représente les relations entre les tables.
Fichier de configuration
Initialisation des tables
Utilisation
Tableau
Table de hachage (ou dictionnaire)
Si l'on ne tient pas compte de l'utilisation éventuelle de la classe d'amorçage ("Bootstrap.php"), une ressource est initialisée seulement si elle apparaît dans le fichier d'initialisation (".ini"). Ainsi, pour initialiser la vue, il faut insérer la ligne dans le fichier d'initialisation de l'application :
resources.view =
Dans le fichier d'initialisation de l'application, les délimiteurs de chaîne ne sont pas interchangeables.
Il est conseillé d'utiliser le guillemet double (").
La ligne ci-dessous produit le résultat escompté.
APPLICATION_PATH "/../logs/application.log"
La ligne ci-dessous génère l'insertion d'un espace indésirable à l'endroit de la concaténation.
APPLICATION_PATH '/../logs/application.log'
La configuration du chargeur de classe peut se faire à deux endroits :
- Dans le fichier d'initialisation de l'application.
- Au niveau du point d'entrée de l'application. En général, il s'agit du fichier "index.php" (sauf si les règles de réécriture d'URL définies dans le fichier ".htaccess" mentionnent un autre fichier).
Dans les exemples qui suivent, les classes dont le nom commence par les préfixes"My_" et "Libs_" seront automatiquement chargées lors de leur utilisation.
- La classe My_Example_Class doit être stockée dans le fichier "My/Example/Class.php".
- La classe Libs_Example_Class doit être stockée dans le fichier "Libs/Example/Class.php".
Dans le fichier d'initialisation de l'application
Au niveau du point d'entrée de l'application
Le code ci-dessous déclare un chargeur automatique de ressources.
- On commence par déclarer "l'espace de nom" (namespace) pour les ressources.
En l'occurrence, on déclare l'espace de nom désigné par la chaîne "Application".
- Puis on déclare des types de ressource pour l'espace de nom précédemment déclaré.
En l'occurrence, on déclare le type de ressource désigné par le nom "model".
L'aide d'action (Fichier: My/ActionsHelpers/MyHelper.php).
Configuration du chargeur d'aides d'action.
Utilisation de l'aide d'action dans le contrôleur.
Dans l'exemple qui suit, on initialise la ressource "session" à l'intérieur de la classe d'amorçage de l'application.
Il est aussi possible d'initialiser cette ressource dans le fichier d'initialisation de l'application.
Création d'une ressource personnalisée
Il est possible de définir ses propres ressources, implémentées sous la forme de classes.
Dans l'exemple ci-dessous :
- Le greffon de ressource est implémenté par la classe "
My_Resources_Googleajaxsearchapikey
".
- La classe est définie dans le fichier "File:
My/Resources/Googleajaxsearchapikey.php
".
- Le nom de la ressource (utilisé dans le fichier d'initialisation de l'application) est défini par la propriété "
$_explicitType
", de la classe la classe "My_Resources_Googleajaxsearchapikey
".
ATTENTION !!! Le nom du fichier PHP doit se composer uniquement de caractères minuscules, sauf le premier caractère!
Initialisation de la ressource
L'initialisation de la ressource se fait dans le fichier d'initialisation de l'application.
Note: Le nom utilisé pour désigner la ressource est défini par la propriété "$_explicitType
" de la classe qui implémente la ressource (en l'occurrence "My_Resources_Googleajaxsearchapikey
").
Accès à la ressource depuis le contrôleur d'action
Note: Le nom utilisé pour désigner la ressource est défini par la propriété "$_explicitType
" de la classe qui implémente la ressource (en l'occurrence "My_Resources_Googleajaxsearchapikey
").
Accès à la ressource depuis une vue
Note: Le nom utilisé pour désigner la ressource est défini par la propriété "$_explicitType
" de la classe qui implémente la ressource (en l'occurrence "My_Resources_Googleajaxsearchapikey
").
La validateur (Ficher: "My/Validators/Login.php")
Utilisation, dans la classe qui implémente le formulaire :
Note: Cet exemple suppose que le chargeur automatique de classe est correctement configuré (autoloaderNamespaces.0 = "My"
).
Utilisation :
Implémentation
Ecriture de l'aide de vue (Fichier "application/views/standard/helpers/Tagger.php
")
Configuration de la vue
Dans la classe d'amorçage
Ou dans le fichier d'initialisation
Utilisation
Depuis une vue
Dans un décorateur
Création dans la classe d'amorçage de l'application.
Utilisation
Il est possible d'insérer de l'information dans le "place holder" depuis n'importe quel fichier PHP qui compose l'application.
Extraction du contenu (dans le fichier de gabarit, par exemple).
Implémentation
Fichier "My\Forms\Decorators\SubmitLink.php
".
Utilisation
Le code ci-dessous assigne le décorateur à un élément du formulaire.
Remarque: Il ne faut pas oublier d'initialiser le chargeur de classe ("autoloaderNamespaces.0 = "My"
").
L'adaptateur
Fichier "application/models/UsersMapper.php
".
La table
Fichier "application/models/DbTable/Users.php
"
Accès à la base de donnée
Initialisation de l'application
Dans le fichier d'initialisation de l'application :
Dans la classe d'amorçage de l'application, on crée les adaptateurs vers les bases de données.
Création des tables
Où placer les définitions des modèles de données?
Hypothèse : Vous utilisez la configuration par défaut pour les ressources liées à l'application.
Vous pouvez changer l'emplacement des fichiers qui définissent les modèles de base :
Le point important est le suivant :
- L'ID de l'élément qui représente le bouton d'envoi est le texte passé au constructeur de l'élément (
$submit = new Zend_Form_Element_Submit('submit');
).
- Pour définir le texte qui apparaît sur le bouton, il faut utiliser la méthode "
setLabel()
" ($submit->setLabel('Envoyer');
).
On personnalise le texte qui va apparaître sur l'image (Fichier "My\Captchas\Image.php
").
Puis on crée le filtre anti-robot.
Utilisation simple
Dans le fichier d'initialisation de l'application :
Dans le code de l'application :
Utilisation avancée
Dans le fichier d'initialisation de l'application :
Dans la classe d'amorçage de l'application :
Les vues partielles permettent de définir des éléments de vues complexes (ex: des menus de navigation). Ces vues peuvent être insérées dans d'autres vues.
Créer un fichier PHTML qui contient la vur partielle. Exemple "application/views/partials/MenuActions.phtml
".
Dans une vue (qui peut être un gabarit) :
Remarque: Il est possible de passer les valeurs aux vues partielles (http://framework.zend.com/manual/fr/zend.view.helpers.html)
Retourner du JSON depuis une action :
Retourner du texte depuis une action :
Le serveur
Le client
Création du WSDL




ATTENTION !!!
En cas de problème, pensez à régénérer les "associations de contenu" ("Generate Binding Content") - comme indiquer sur le figure ci-dessous.
Dans la description WSDL ci-dessous, il faut modifier la ligne ci-dessous (à la fin du WSDL).