Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2009-07-31 12:33:02

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

PHP 5.3 : évolutions requises pour plugins et thèmes

Bonjour,

Comme indiqué précédemment, nous sommes en train de préparer le terrain pour supporter php 5.3 au niveau de dotclear 2. Des

Cela implique un certain nombre de modifications au niveau du core, mais aussi hélas au niveau de la plupart des plugins, ainsi que de certains thèmes.

Explications techniques

Depuis la version 5.3, php est plus strict au niveau de la vérification des passages de paramètres aux fonctions, notamment en ce qui concerne les passages par référence.

Certains mécanismes du core de dotclear, dont les appels de behaviors et les recordsets utilisent des constructions d'appels dynamiques à certaines fonctions, cassant parfois les mécanismes de références (en particulier, les appels aux méthodes magiques __call, et func_get_args). Pratiquement, chaque appel à un behavior peut donner lieu à des messages du type :

Warning: Parameter 1 to metaWidgets::initDefaultWidgets() expected to be a reference, value given in /home/rpmbuild/site/blog/inc/core/class.dc.core.php on line 304

Depuis php 5, dès lors qu'un paramètre d'appel est un objet, il est forcément passé par référence. Il est donc possible de supprimer le "durcissement" des signatures des fonctions, en ne forçant plus les références, et ce uniquement lorsque les paramètres sont des objets.

Ajout du 04/08/2009
De plus, depuis php 5.3.0, l'extension regex est obsolète ("deprecated"), ce qui engendrera des warning si les plugins utilisent toujours ces fonctions. Sont concernées les fonctions suivantes :
* ereg / eregi (remplaçant potentiel, après adaptation : preg_match)
* ereg_replace / eregi_replace (remplaçant potentiel, après adaptation : preg_replace)
* split / spliti (remplaçants potentiels, après adaptation : preg_split ou str_split)
* sql_regcase


En pratique

Votre plugin/thème est concerné par ces modifications si :
* Il étend de nouveaux behaviors (via $core->addBehavior)
* Il définit de nouveaux record (au sens dblayer)
* Il utilise l'extension regex de php

Les modifications à effectuer consistent à supprimer les références (= les "&" devant les noms des paramètres) dans la déclaration de la fonction.

Ces modifications peuvent d'ores et déjà être mises en œuvre, elles sont rétro-compatibles avec les versions antérieures de php 5

Exemple
Le code suivant :

<?php

$core->addBehavior('templateBeforeBlock',array('behaviorsMyPlugin','myBeforeBlock'));


class behaviorsMyPlugin
{
    public static function myBeforeBlock(&$core,$b,$attr) {
        // ... code du behavior...
    }
}


?>

sera modifié de la manière suivante (suppression du "&" dans la déclaration de méthode) :

<?php

$core->addBehavior('templateBeforeBlock',array('behaviorsMyPlugin','myBeforeBlock'));


class behaviorsMyPlugin
{
    public static function myBeforeBlock($core,$b,$attr) {
        // ... code du behavior...
    }
}


?>

Dyslexics have more fnu!

Hors ligne

#2 2009-08-04 06:51:58

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : PHP 5.3 : évolutions requises pour plugins et thèmes

Sujet chapeau complété le 4 août, en prenant en compte l'extension regex, devenue obsolète.


Dyslexics have more fnu!

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map