Passage par référence dans un appel de méthode
J'ai écris une fonction qui permet de faire du rechercher / remplacer sur plusieurs variables d'un coup :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| function replace_all_by($arr_fields, $arr_replace_by){
foreach ($arr_fields as &$field){
foreach ($arr_replace_by as $arr_replace_by_key => $arr_replace_by_value){
$field = str_replace($arr_replace_by_key, $arr_replace_by_value, $field);
}
}
}
$explanation_title = str_replace('%explanation_title%', $user->lang['INTRODUCIATOR_MOD_DEFAULT_MESSAGE_TITLE'], $params['explanation_message_title']);
$explanation_text = str_replace('%explanation_text%', $user->lang['INTRODUCIATOR_MOD_DEFAULT_MESSAGE_TEXT'], $params['explanation_message_text']);
$rules_title = str_replace('%rules_title%', $user->lang['INTRODUCIATOR_MOD_DEFAULT_RULES_TITLE'], $params['explanation_message_rules_title']);
$rules_text = str_replace('%rules_text%',generate_text_for_display($forum_rules['rules'], $forum_rules['rules_uid'], $forum_rules['rules_bitfield'], $forum_rules['rules_options']), $params['explanation_message_rules_text']);
$link_goto_forum = $user->lang['INTRODUCIATOR_MOD_DEFAULT_LINK_GOTO_FORUM'];
$link_post_forum = $user->lang['INTRODUCIATOR_MOD_DEFAULT_LINK_POST_FORUM'];
// Replace in each string the predefined fields
replace_all_by(
array(
&$explanation_title,
&$explanation_text,
&$rules_title,
&$rules_text,
&$link_goto_forum,
&$link_post_forum
),
array(
'%forum_name%' => $forum_name,
'%forum_url%' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $params['fk_forum_id']),
'%forum_post%' => append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=post&f=' . $params['fk_forum_id']),
)
); |
Ce code est une partie d'un MOD Introduciator de phpBB. Or ce code est refusé car :
Citation:
Le passage de variable par référence est déprécié a partir de php 5.4, ton mod ne sera donc pas fonctionnel sous php 5.4 tout comme l'utilisation du mot-clé var qui est propre a php 4 et déprécié (standard strict) en php5 également.
J'ai donc installé la dernière version wampserver qui permet de tester avec PHP version 5.5.12
Et ce code passe sans aucun problème. J'essaie de comprendre ce qui va ou pas, si la remarque est judicieuse ou pas...
Le problème est en fait le array que je crée, justement avec des '&' devant les variables pour passer des références et qui semblerai poser des problèmes sous php 5.4 or ça passe sans problème pour moi...
Donc, est-ce que ce code est valide pour php 5.5, si oui ou non, pourquoi ? J'aimerais comprendre.
La personne qui m'a fait cette remarque, m'a dit C'est quand même mon métier mais sans expliquer. En effet, lorsque je crée une fonction avec des références, si je passe un &$ma_variable à cette fonction php me fait une erreur, mais pour un array, ça a l'air de passer... Peut-être parce que array c'est un mot clef du langage ? Et qu'on a le droit de créer un tableau sur des références ?
Sinon, comment modifier ce code pour qu'il soit conforme ?