août 19 2008

PHP et les Espaces de Noms ou Namespaces

Catégorie : Non classé, PHPJulien - 20:32

Qu’est ce qu’un namespaces ?

Une des nouveautés majeure de PHP 5.3 est le support des namespaces. Mais qu’est-ce donc que les espaces de nom ?

Pour l’expliquer très simplement, il suffit de remonter à l’époque ou l’envie vous prenait de créer une fonction appelée date.

Votre fonction déclarée par le mot clé function se retrouvée dans la contexte global.

Par conséquent, comme PHP intègre déjà une fonction native appelée date dans le contexte global, et qu’il est impossible de re-déclarer une fonction.

Une erreur de la forme suivante vous était remontée :

Fatal error: Cannot redeclare date()

C’est à ce moment que les espaces de nom entrent en jeu !

Les namespaces permettent de créer des espaces décalés par rapport à l’espace global.

Ainsi, il est possible dans un espace de nom de déclarer des noms de fonctions et classes connues dans l’espace global !

Comment utiliser les namespaces ?

L’utilisation d’un espace de nom est très simple, il s’utilise comme ceci :

Déclarer un namespace

  1. <?php
  2. // test_a.php
  3. namespace MySpace::MySubSpace;
  4. function MyFunction()
  5. {
  6. $str = ‘Julien Breux’; // Petit coucou pour Google ;)
  7. return $str;
  8. }
  9. ?>

Utiliser un namespace par chemin absolue

  1. <?php
  2. // test_b.php
  3. require(‘test_a.php’);
  4.  
  5. $result = MySpace::MySubSpace::MyFunction();
  6. ?>

Utiliser un namespace par “importation”

  1. <?php
  2. // test_c.php
  3. require(‘test_a.php’);
  4.  
  5. // Exemple 1
  6. use MySpace;
  7. $result = MySubSpace::MyFunction();
  8.  
  9. // Exemple 2
  10. use MySpace::MySubSpace;
  11. $result = MyFunction();
  12. ?>

Utiliser un namespace avec des alias

  1. <?php
  2. // test_d.php
  3. require(‘test_a.php’);
  4.  
  5. use MySpace::MySubSpace::MyClass as MyOtherClass;
  6. $result = new MyOtherClass();
  7. ?>

Aller plus loin

Quelques points importants sont aussi à noter avec l’arrivée des espaces de nom:

- La constante __NAMESPACE__ est chargée de retourner le nom du namespace courant.

- Possibilité de déclarer une constante avec le mot clé CONST à l’intérieur un namespace.

- Pour utiliser une fonction de l’espace de nom global, nous utilisons l’accesseur directe ::MyGlobalFunction();

Mot de la fin

Les namespaces, c’est bien !

Dans le prochain article, nous parlerons de la librairie PHAR intégrée en natif à PHP6.

Tags: , , ,


août 15 2008

Projet d’évaluation pour le CESI

Catégorie : PHPJulien - 20:40

Préambule

Comme vous le savez, je ne serai plus affecté au CESI à partir du lundi premier septembre.

La formation oblige à réaliser un projet portant sur les technologies PHP, MySQL, xHTML et CSS. (Oui, oui, celles qui fond de moi un expert bientôt certifié)

C’est pour cela que j’offre un semblant de réponse.

Notez que ce projet doit-être réaliser par des néophytes total sur ces technologie.

Je devrai donc coder quelque chose de très abordable. (Pas de techniques avancées malheureusement)

Ceci dit, avant de prendre mes fonction au sein de L.M.V. peut-être développerai-je le même projet façon orienté objet… qui sait ?

Introduction

J’ai apporté une nuance à ce projet, les utilisateurs lambda peuvent eux aussi ajouter des incidents, ce que je pense beaucoup plus logique. (Mais ce n’était pas le cas dans le projet d’origine… ou l’on supposé que les informations étaient prisent par téléphone ou par mail… intérêt d’une telle application dans un tel cas ?)

L’application doit permettre la gestion par un administrateur des incidents informatiques qui surviennent au sein d’une entreprise.

Ces incidents sont soumis par les utilisateurs (le personnel de l’entreprise) et peuvent concerner des problèmes d’affichage, des dysfonctionnements, des coupures réseaux ou des difficultés liées à un applicatif particulier.

Les acteurs sont divisés en deux groupes:

  • Le(s) administrateur(s)
  • Le(s) utilisateur(s)

Les administrateurs peuvent:

  • Créer / Modifier / Supprimer des utilisateurs autorisés à soumettre des incidents
  • Modifier / Supprimer des incidents
  • Transformer l’incident en “résolut” avec la résolution du problème (Ajouté personnel)

Les utilisateurs peuvent:

  • Ajouter / Consulter des incidents (en globalité ou par critères)
  • Consulter les incidents résolus (Ajouté personnel)

NOTE

Dans la mesure ou je ne vais pas vous macher tout les travail, le modèle de base de données a été changé.

Tags: , ,


août 13 2008

Site multilingue

Catégorie : PHPJulien - 19:47

Bonjour,

Suite à l’article de mon ami Didier de php-experts.org sur le système permettant l’utilisation d’un site multilingue, je poste le mien aussi :p

Pour l’utiliser, c’est très simple, il vous suffit d’utiliser en plus les sessions.

Voici le fichier du système de langue “lang.inc.php“:

  1. <?php
  2.  
  3. function getLang()
  4. {
  5.   $langAllowed = array(‘fr’, ‘en’, ‘es’);
  6.   if(isset($_GET[‘lang’]) && !empty($_GET[‘lang’]) && in_array($_GET[‘lang’], $langAllowed)):
  7.     $_SESSION[‘lang’] = $_GET[‘lang’];
  8.     $lang = $_SESSION[‘lang’];
  9.   elseif(empty($_SESSION[‘lang’])):
  10.     $browserLanguage = explode(‘,’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]);
  11.     $_SESSION[‘lang’] = substr($browserLanguage[0], 0, 2);
  12.     $lang = $_SESSION[‘lang’];
  13.   else:
  14.     $lang = $_SESSION[‘lang’];
  15.   endif;
  16.   return $lang;
  17. }
  18. ?>

Voici un fichier d’exemple “exemple.php“:

  1. <?php
  2. require_once(‘lang.inc.php’);
  3. print("<b>Le site est en:</b> ");
  4. switch(getLang())
  5. {
  6.   case‘fr’:
  7.     print("Fran&ccedil;ais");
  8.   break;
  9.   case‘es’:
  10.     print("Espagnol");
  11.   break;
  12.   case‘en’:
  13.     print("Anglais");
  14.   break;
  15. }
  16. <b>Passer le site en:</b> ");
  17. print("<a href=\"?lang=fr\">Fran&ccedil;ais</a> - ");
  18. print("<a href=\"?lang=es\">Espagnol</a> - ");
  19. print("<a href=\"?lang=en\">Anglais</a> - ");
  20. print("<a href=\"?lang=\">V&eacute;rifier</a>");
  21. ?>

En espèrent que cette portion de code aura répondu à vos attentes ;)

DÉMONSTRATION

Source disponible sur le Wiki.

EDIT: Ajout de la vérification de la langue suite au commentaire de Savageman.

Tags: , ,


août 09 2008

Forum PHP 2008 - 8 et 9 décembre 2008 à Paris

Catégorie : ConférencesJulien - 11:54

Bonjour,

Comme vous le savez surement, le forum PHP 2008 se tiendra à Paris le 8 et 9 décembre.

Je serai donc présent, et peut-être conférencier ? qui sait ? ;-)

Merci à l’association l’afup.

Tags: ,


août 09 2008

Ha Ha Ha… PHP 4.4.9 released!

Catégorie : PHPJulien - 11:42

Bonjour !

J’avais envie de rigoler un peu…. car PHP 4.4.9 released!

Article sur PHP Net

Moi, vue la puissance de PHP5, je dit: “Merci PHP4, tu nous as permis de comprendre que tu devez te faire remplacer, ton modéle objet ne nous manquera pas! Bisou !”


août 05 2008

PHP5.3 est une brute !

Catégorie : PHPJulien - 20:29

Et oui, je vous l’avais annoncé, la version 5.3 de PHP a aussi sa propre brute.

Jeu à découvrir.

Merci à Motion-Twin, une fois de plus !

Tags: , , ,


août 05 2008

Nouvelle constante magique __DIR__

Catégorie : PHPJulien - 10:31

Encore une belle nouvelle qui est arrivée il y’a déjà un bon moment, mais que j’aimerai vous faire partager…

Avant, nous faisions:

  1. <?php
  2. $currentDir = dirname(__FILE__);
  3. ?>

Maintenant, nous ferons:

  1. <?php
  2. $currentDir = __DIR__;
  3. ?>

Tags:


août 02 2008

Sortie de PHP 5.3!

Catégorie : PHPJulien - 14:29

Bonjour à toutes et tous!

Enfin une nouvelle qui me réjouit… la sortie de PHP 5.3!

Logo PHP

Logo PHP

En effet, la version PHP 5.3 est au stade de bêta, et annonce plein de bonnes choses:

  • L’implémentation des namespaces
  • L’intégration en natif de l’extension PHAR
  • L’intégration de la nouvelle méthode magique __callStatic()
  • MySQLnd
  • Erreur de type E_DEPRECATED
  • Garbage Collection

Et là, vous allez me dire: What else ?

Et bien je vous répondrai que PHP est entrain de prendre une bonne part de maturité.

Il est très facile de développer une application en PHP, mais heureusement, n’est pas développeur qui veut…

Cela demande du temps, de l’investissement… Et j’avoue que pour ma part, j’ai commence à ressentir le professionnalisme lorsque j’ai été mis à l’épreuve sur des applications qui reçoivent vingt à trente mille connexions à l’heure.

Voir l’annonce officielle
Voir la TODO PHP5.3

Tags: , ,