6. Les sous espaces de noms
Le séparateur d’espaces de noms permet de
définir un sous espace de nom :
namespace EpxPayment;
05/10/2011 PHP 5.3 6
7. L’ordre de résolution
1. Un nom qualifié
2. L’espace de nom courant
3. L’espace de nom global
05/10/2011 PHP 5.3 7
8. L’ordre de résolution
1. Un nom qualifié
ExceptionRuntimeException
2. L’espace de nom courant
RuntimeException
3. L’espace de nom global
RuntimeException
05/10/2011 PHP 5.3 8
9. Utilisation des espaces de noms
// Fonction
echo number_format(2); // Affiche 2
echo Epxnumber_format(2); // Affiche 2,00
// Classe
$e = new Exception('error');
// Constante
const APPLICATION_ENV = 'cli'; // Nouveauté 5.3
echo APPLICATION_ENV; // Affiche cli
05/10/2011 PHP 5.3 9
11. Import
namespace Epx;
use ZendRegistry, // import de la classe
ZendTranslator; // import de l’espace de nom
$r = new Registry;
$t = new TranslatorTranslator;
05/10/2011 PHP 5.3 11
15. Etude de cas
// Aujourd’hui, ZF1 est en style PHP 5.2
require_once 'Zend_Controller_Action';
class IndexController
extends Zend_Controller_Action {}
05/10/2011 PHP 5.3 15
16. Etude de cas : migration d’une librairie
// Import du contrôleur ZF1
use Zend_Controller_Action as ActionController;
class IndexController extends ActionController {}
// Après la migration ZF2
use ZendControllerAction as ActionController;
class IndexController extends ActionController {}
05/10/2011 PHP 5.3 16
17. Lisibilité du code
// Test sur un type d’objet
namespace ZendLog;
if ($writer instanceof Writer) {/*…*/}
// Type d’une classe
namespace ZendLogWriter;
use ZendLogWriter;
class Mail implements Writer {}
05/10/2011 PHP 5.3 17
18. Lisibilité du code
// Notation ZF1 compatible PHP 5.2
$vr = new Zend_Controller_Action_Helper_ViewRenderer;
Zend_Controller_Action_HelperBroker::addHelper($vr);
// Notation raccourcie
use ZendControllerActionHelperBroker,
ZendControllerActionHelperViewRenderer;
HelperBroker::addHelper(new ViewRenderer);
05/10/2011 PHP 5.3 18
19. PSR-0 : PHP Specification Request 0
• Interopérabilité pour l’autoload entre les
frameworks
• Zend Framework 2, Doctrine2, Symfony2 l’ont
déjà adopté
05/10/2011 PHP 5.3 19
22. Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
05/10/2011 PHP 5.3 22
23. Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
• Chaque classe définit un espace de nom
05/10/2011 PHP 5.3 23
24. Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
• Chaque classe définit un espace de nom
• Un espace de nom par fichier
05/10/2011 PHP 5.3 24
25. Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
• Chaque classe définit un espace de nom
• Un espace de nom par fichier
• Utiliser un espace de nom unique
05/10/2011 PHP 5.3 25
26. Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
• Chaque classe définit un espace de nom
• Un espace de nom par fichier
• Utiliser un espace de nom unique
• Utiliser l’import au lieu de require_once
05/10/2011 PHP 5.3 26
27. Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
• Chaque classe définit un espace de nom
• Un espace de nom par fichier
• Utiliser un espace de nom unique
• Utiliser l’import au lieu de require_once
• Eviter d’utiliser la résolution globale (sauf
pour les chaînes de caractères)
05/10/2011 PHP 5.3 27
33. Amélioration des performances
• Drupal : 20% plus rapide
• Wordpress : 15% plus rapide
source : http://news.php.net/php.internals/36484
05/10/2011 PHP 5.3 33
34. Nouvelle méthode magique
namespace MyFilter;
class Int
{
public function __invoke($value)
{
return filter_var($value, FILTER_SANITIZE_NUMBER_INT);
}
}
$filter = new Int;
var_dump($filter('CL1234')); // Affiche 1234
05/10/2011 PHP 5.3 34
35. Les limitations du mot clé self
namespace CwpBoutique;
class Commande
{
public static function get($id)
{
return new self;
}
}
use CwpBoutiqueEvolutionCommande;
$cl = get_class(Commande::get(42));
var_dump($cl); // Affiche CwpBoutiqueCommande
05/10/2011 PHP 5.3 35
37. Late State Binding
namespace CwpBoutique;
class Commande
{
public static function get($id)
{
return new static;
}
}
use CwpBoutiqueEvolutionCommande;
$cl = get_class(Commande::get(42));
var_dump($cl); // Affiche CwpBoutiqueEvolutionCommande
05/10/2011 PHP 5.3 37
39. Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
05/10/2011 PHP 5.3 39
40. Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
05/10/2011 PHP 5.3 40
41. Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
• Ajout de NOWDOC
05/10/2011 PHP 5.3 41
42. Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
• Ajout de NOWDOC
• Ajout d’un garbage collector
05/10/2011 PHP 5.3 42
43. Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
• Ajout de NOWDOC
• Ajout d’un garbage collector
• Support amélioré pour Windows
05/10/2011 PHP 5.3 43