Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
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
Vous n'êtes pas identifié(e).