Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

Actualité : PHP 5.3.0 final est sorti
Avec des améliorations de POO et de performances, l'avez-vous essayé ?

Le , par RideKick, Rédacteur
PHP 5.3, la prochaine grande évolution du langage PHP, approche de la phase alpha 3 : http://wiki.php.net/todo/php53

MÀJ 30/06/2009 : Sortie de PHP 5.3 version finale !
Citation Envoyé par Yogui  Voir le message

MÀJ 28/06/2009 : Le code source est tagué "5.3.0". Sortie de PHP 5.3 final confirmée pour le mardi 30 juin.
Citation Envoyé par Yogui  Voir le message
Johannes annonçait il y a quelques heures que PHP 5.3 est réellement prévu pour mardi, cette fois c'est la bonne.
Les builds pour Windows seront faits aujourd'hui (dimanche), puis testés par Pierre et ses collègues jusqu'à lundi soir. Si vous repérez un bug dans ce temps, faites-vous connaître

MÀJ 10/06/2009 : PHP 5.3 va bientôt sortir !
Citation Envoyé par Yogui  Voir le message
Le 11 juin : PHP 5.3 RC3
Jusqu'au 17 juin : corrections de bugs
Le 18 juin : PHP 5.3 RC4 s'il y a eu des commits depuis le 11 juin (pour info : il y en a eu )
Jusqu'au 24 juin : dernières vérifications de PHP 5.3 RC4
Le 25 juin : PHP 5.3 RC 4 devient PHP 5.3.0 final

Voici un aperçu des nouveautés :

L'une des évolutions majeures de la version 5.3 est l'ajout des espaces de noms, aka namespaces. Nous en avons discuté ici :
http://www.developpez.net/forums/d60...oms-php-5-3-a/

C'était une discussion animée. Le PHP Group lui-même a mis plus de trois ans (!) pour arriver à un accord sur le séparateur d'espaces de noms (le backslash). Nous en avons discuté ici-même :
http://www.developpez.net/forums/d63...-enfin-choisi/
Une autre fonctionnalité de PHP 5.3, quoique moins attendue dans la mesure où elle concerne des cas d'utilisation moins fréquents, concerne les "fonctions anonymes", aussi appelées "fonctions lambda" et souvent utilisées dans le contexte de "fermetures". Là encore, nous en avons parlé sur les forums :
http://www.developpez.net/forums/d57...ermetures-php/

Les Late Static Bindings (LSB) sont une fonctionnalité dont les frameworks vont être particulièrement friands.

La nouvelle méthode magique __callStatic(), équivalente à __call() pour les méthodes statiques.

Le pilote natif de MySQL pour PHP : mysqlnd, qui résoud tous les problèmes actuels de compatibilité de licence tout en améliorant les performances des extensions qui l'utilisent (MySQLi, PDO...).

Fichiers php.ini par utilisateur avec une syntaxe similaire aux fichiers ".htaccess" pour Apache httpd.

Le niveau d'erreurs E_DEPRECATED avertir le programmeur s'il utilise une fonctionnalité obsolète du langage.

Un "garbage collector" pour libérer la mémoire lorsque c'est nécessaire : cela rend PHP éligible pour des scripts à long temps d'exécution.

La syntaxe NOWDOC pour les chaînes est l'équivalent "guillemets" si on compare la syntaxe HEREDOC à des "apostrophes". Dans un cas, les chaînes spéciales sont interprétées (variables, \n, \t, etc.) mais pas dans l'autre.

Améliorations de la Standard PHP Library (SPL).

Une nouvelle extension de packaging, phar, permet de distribuer des applications entières sous la forme d'un fichier créé à l'aide d'un algorithme puissant de compression. Ce fichier peut être exécuté directement par PHP sans avoir besoin de le décomprimer.

Les versions compilées (officiellement) pour Windows le sont avec Microsoft Visual Studio 9 au lieu de Visual Studio 6, ce qui apporte de nettes améliorations de stabilité, performances, etc. pour ceux d'entre vous qui développent sous Windows (et visiblement, vous êtes une majorité).

etc.

De nombreux frameworks PHP ont déjà prévu un plan de migration vers PHP 5.3 pour leur prochaine version majeure (principalement à cause des espaces de noms)

Qu'en dites-vous ? Qui d'entre vous a déjà essayé PHP 5.3 alpha, qui prévoit d'essayer les versions bêta ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de berceker united berceker united - Expert confirmé http://www.developpez.com
le 29/07/2009 à 12:46
Citation Envoyé par kaymak  Voir le message
Là précisèment je ne peut te donner le message d'erreur car je suis repassé sur la 5.2.9. Mais j'ai un exemple en tête.

fron scratch :
Code : Sélectionner tout
1
2
3
4
5
 
class logger extends ArrayObject{ 
public function append( $message, $categorie, $niveau ){ 
} 
}
Normalement avec cet exemple, et en te positionnant sur e_strict, php devrais emettre un message concernant la signature de la méthode logger::append qui n'est plus compatible avec ArrayObject::append.

donc bof, j'ai pas envie de mettre ces arguments en optionnel cela me ferait du job que php peut déjà faire.

m'enfin je vérifierais tout de même tout à l'heure que l'exemple est ok.

Là, je dirais que ça reste discutable. Pour moi il y a pas de raison que ça puisse péter une erreur, vu que tu souhaites surcharger une méthode d'une classe parente. Par contre, il n'est toujours pas possible de surcharger une méthode d'une même classe en changeant sa signature et je pense que c'est ça qui fait qu'il y a conflit d'erreur.
Peut être que c'est une erreur et tu peux éventuellement ouvrir un ticket sur ce point. Pour moi, il y a pas de raison que cela change à moins que cela était prévus.
Avatar de Yogui Yogui - Rédacteur http://www.developpez.com
le 29/07/2009 à 13:25
Salut

Pour info, la surcharge de méthode d'une classe parente est soumise à certaines contraintes (bonnes pratiques POO) :

  • même nombre d'arguments obligatoires
  • même visibilité (public/protected/private)


C'est simplement l'implémentation POO par PHP qui le préconise. La réflexion est que si on change ces aspects d'une méthode, alors le polymorphisme n'est plus la même. Si j'ai une classe A et une classe B qui en dérive, je dois pouvois appeler les méthodes de B de la même manière que celles de A puisque ce sont des objets compatibles : si vous changez la visibilité de la méthode ou le nombre d'arguments obligatoires, alors ce n'est plus possible et vous cassez toute la conception OO de votre application.
Avatar de berceker united berceker united - Expert confirmé http://www.developpez.com
le 29/07/2009 à 16:42
Citation Envoyé par Yogui  Voir le message
Salut

Pour info, la surcharge de méthode d'une classe parente est soumise à certaines contraintes (bonnes pratiques POO) :

  • même nombre d'arguments obligatoires
  • même visibilité (public/protected/private)


C'est simplement l'implémentation POO par PHP qui le préconise. La réflexion est que si on change ces aspects d'une méthode, alors le polymorphisme n'est plus la même. Si j'ai une classe A et une classe B qui en dérive, je dois pouvois appeler les méthodes de B de la même manière que celles de A puisque ce sont des objets compatibles : si vous changez la visibilité de la méthode ou le nombre d'arguments obligatoires, alors ce n'est plus possible et vous cassez toute la conception OO de votre application.

Je suis d'accord avec toi. Par contre, je m'étonne qu'avant cela ait pu fonctionner avant comme il le décrit.
Avatar de kaymak kaymak - Membre chevronné http://www.developpez.com
le 29/07/2009 à 16:42
Je sais bien yogui.... Mais en php5.2 sa ne le faisait pas et sa m'arrangeait bien.
La je serais obliger de modifier le design en implémentant countable et iterator pour garder le même appel.... si ce n'est plus.
Avatar de berceker united berceker united - Expert confirmé http://www.developpez.com
le 29/07/2009 à 16:44
Citation Envoyé par kaymak  Voir le message
Je sais bien yogui.... Mais en php5.2 sa ne le faisait pas et sa m'arrangeait bien.
La je serais obliger de modifier le design en implémentant countable et iterator pour garder le même appel.... si ce n'est plus.

Donc cela signifie que tu as mal monté ton affaire .
Ce qui m'étonne pourquoi cela ait été changé maintenant ?
Avatar de Yogui Yogui - Rédacteur http://www.developpez.com
le 29/07/2009 à 20:03
Cela n'a pas vraiment changé, il me semble qu'avec PHP 5.2 c'était déjà inclus dans le niveau E_STRICT. Peut-être que PHP 5.3 a simplement rendu ce niveau d'erreurs plus visible, je n'ai pas vérifié. Quelqu'un a-t-il davantage d'informations ?
Avatar de Floréal Floréal - Membre éclairé http://www.developpez.com
le 05/08/2009 à 16:17
Bonjour,
Je me pose des questions quant à l'utilisation de la fonction __autoload() en php 5.3.
En effet l'introduction des namespace sucite ma curiosité, je vais illustrer cela par quelques exemples:
partant de ces deux scripts:

Class.class.php:
Code : Sélectionner tout
1
2
3
4
<?php 
class Classe { 
  //... 
};

ns/Class.class.php:
Code : Sélectionner tout
1
2
3
4
5
<?php 
namsepace \ns; 
class Classe { 
  //... 
};
ns/Class2.class.php:
Code : Sélectionner tout
1
2
3
4
5
<?php 
namsepace \ns; 
class Classe2 { 
  //... 
};
cas 1:
Code : Sélectionner tout
1
2
$objet1 = new \Classe(); 
$objet2 = new \ns\Classe();

cas 2:
Code : Sélectionner tout
1
2
use \ns; 
$objet1 = new Classe2();
Comment doit-on définir la fonction __autoload() dans le premier cas?
Est-ce que les namespaces préfixés sont passés en paramètre de la fonction __autoload()?
Existe-t'il, pour le second cas un équivalent de __autoload() pour les namespaces à redéfinir (appelée lors de l'utilisation d'un use, par exemple, pour savoir si la classe)?

En fait je pensais à un truc dans ce genre là était possible (en s'appuyant sur l'exemple que j'ai donné un peu plus haut):
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
function __autouse($ns) { 
  global $__used_ns_dirs; 
  if (!isset($__ns_dirs)) { 
    $__used_ns_dirs = array() 
  } 
  $__used_ns_dirs[] = $ns; 
} 
 
function __autoload($class_name) { 
  global $__used_ns_dirs; 
  $search_dir = isset($__used_ns_dirs) ? $__used_ns_dirs : array(); 
  foreach ($search_dir) { 
    // ajout de la classe avec les verifications necessaires (INCLUDE_PATH, etc.) en tennat compte des namepsace. 
  } 
}
Avatar de metagoto metagoto - Membre éclairé http://www.developpez.com
le 05/08/2009 à 16:47
Quand php appelle les __autoload, le nom de la classe qui est passé en paramètre est un nom complètement qualifié (cependant, le premier '\' n'est jamais passé).
Exemple, si le namespace courant est machin\truc et que tu fais $a = new A; alors php va regarder si machin\truc\A existe. S'il ne trouve pas la classe, il appelle l'autoload avec machin\truc\A comme nom de classe.
Si machin était un alias pour, disons, autre\bidule, alors autoload recevra autre\bidule\machin\truc\A comme nom de classe.

C'est ce genre d'autoloading que j'utilise:
http://www.developpez.net/forums/d76...ng-namespaces/
Plusieurs autoloaders basés sur ce principe sont registrés auprès de spl_autoload_register(). En fait, une registration par racine de namespace:

Genre si j'ai un namespace framework (et possiblement des sous ramifications framework\blah\bleh..), j'aurais un autoloader pour framework, qui est un composant du framework.

Si j'ai un autre namespace myself\machin\truc, j'enregistre un autoloader similaire qui gère uniquement myself et ses descendants.

Je n'ai rien dans l'include_path parceque j'en n'ai pas besoins. Il y a un mapping directe entre les branches des namespaces et les répertoires du filesys. Je pense que c'est un bon compromis en terme de performance (aucun lookups) et de facilité d'utilisation.
Avatar de Floréal Floréal - Membre éclairé http://www.developpez.com
le 06/08/2009 à 0:16
Ah oui, c'est vraiment pas bête. Je n'avais pas envisagé les choses sous cet angle là. Ce que tu propose est intéressant et me plait beaucoup.
Avatar de gene69 gene69 - Membre chevronné http://www.developpez.com
le 13/10/2010 à 22:30
La question est "que pensez vous de php5.3"?

ma réponse est que du bien !

  • d'abord je me moque des histoires de syntaxes compliquées, logiques ou pas (quoi que je fasse des fonctions anonymes depuis peu)
  • parce que ya plein de fonction qui n'étais pas native windows et qui le sont devenue
  • parce que j'ai eu 0 problème pour faire passer des scripts d'un moteur php 4.3 à 5.3.1, hormis la mode qui veut qu'on ne fait plus de magic quote ni de balise brève.
  • parce que j'ai trouver des trucs sympa comme __DIR__ et pour moi qui me limite a des syntaxes triviale, c'est génial.
Avatar de guk92 guk92 - Membre à l'essai http://www.developpez.com
le 21/09/2011 à 14:45
Le PHP est un très bon langage informatique, il ne lui manque plus que la gestion de l'UNICODE, d'intégrer des API standards sans passer par des framework tierce (ex: génération de document PDF), et d'être un peu plus rapide à l'exécution.
Offres d'emploi IT
Administrateur web solutions H/F
Page Personnel - Ile de France - Paris (75000)
GESTIONNAIRE DE FLUX DE DONNEES SI / WEB
ALINEA - Provence Alpes Côte d'Azur - Aubagne (13400)
Dev web - php
PIXEL-ESPORT DEVELOPPEMENT - Ile de France - Asnières-sur-Seine (92600)

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique Développement Web : Xavier Lecomte -