PHP error na overzetting naar 5.3
Nadat de host (Byte) is overgegaan naar PHP 5.3 kreeg ik nogal wat errors op
de website (met Joomla gemaakt), ik heb al verschillende zelf opgelost, maar de volgende error lukt me niet om op te lossen:
Deprecated: Assigning the return value of new by reference is deprecated in /home/users/vvharftp/vvharkstede.nl/
components/com_joomleague/frontend/default/show_results.tpl.php on line 118
Zie deze link: http://www.vvharkstede.nl/index.php?option=com_joomleague&func=showResultsRank&Itemid=467&p=6
Ik heb opgezocht welke code daarbij staat en dat is het onderstaande:
en de code is:
117
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
118 $params = & new mosParameters( '' );
119 $params->def( 'back_button', true );
120 $params->def( 'popup', false );
121 mosHTML::BackButton( $params );
122 echo "</div>";
123 };?>
118 $params = & new mosParameters( '' );
119 $params->def( 'back_button', true );
120 $params->def( 'popup', false );
121 mosHTML::BackButton( $params );
122 echo "</div>";
123 };?>
Ik heb al met google gezocht, maar ik begreep er niets van
Mijn vraag is, wat betekent de error en wat kan ik eraan doen om
het op te lossen?
groet Martha
'Deprecated' betekend dat het niet meer geldig is. Ofwel, wat eerst kon kan nu niet meer, in dit geval is het volgens mij dat & ding voor de 'new mosParameters op rij 2, laat die s weg?
Ja Deprecated betekend verouderd. O daarom begreep ik het Engels niet,
(the return value of new by reference). Achteraf is het zo simpel.
Toch tijd dat ik es met PHP begin. Dan zijn dit soort errors nog
gemakkelijker op te lossen, want hij is nu gelukkig weg.
Nogmaals bedankt voor de snelle hulp.
groet
Wat ik mij afvraag of het weglaten van de & verder geen gevolgen heeft. Kan dit zomaar?
Waarom was die & er eigenlijk? Betekende toch dat je dat object forceert? Ook als die een error geeft?
Ofwel geef je $params mee als functie parameter.
Dan heb je binnen de functie nog steeds temaken met hetzelfde mosParameters object.
Of gewoon de nieuwe versie van Joomla installeren???
Het ligt aan het programma Joomleague, daar heb ik ook de bestanden van
veranderd. Alleen weet ik niet zeker of ik daar de nieuwste versie van heb.
Dat ga ik nog uitzoeken.
http://php.net/manual/en/language.references.php:
After hours of confusion and reading tons of posts I finally figured out that replacing PHP 4 style object creation, where new is assigned by reference:
$node_obj =& new someClass($somearg, $moreargs);
which in PHP 5.3.0 generates an E_STRICT message telling you that "Assigning the return value of new by reference is deprecated"
with the following, where & has been removed:
$node_obj = new someClass($somearg, $moreargs);
in some cases (at least in recursive loops while creating a tree of nodes containing child nodes) requires
unset($node_obj);
before the actual object assignment line to avoid all child nodes becoming identical.
Hope that delicate piece of information will save someone else a few hours.
Ik heb deze uitleg nog gevonden op After hours of confusion and reading tons of posts I finally figured out that replacing PHP 4 style object creation, where new is assigned by reference:
$node_obj =& new someClass($somearg, $moreargs);
which in PHP 5.3.0 generates an E_STRICT message telling you that "Assigning the return value of new by reference is deprecated"
with the following, where & has been removed:
$node_obj = new someClass($somearg, $moreargs);
in some cases (at least in recursive loops while creating a tree of nodes containing child nodes) requires
unset($node_obj);
before the actual object assignment line to avoid all child nodes becoming identical.
Hope that delicate piece of information will save someone else a few hours.
Assigning by reference
Code sample
$a = &new $func($param1, $param2);
What the script is trying to do
Assign the return value of "new" by reference.
Warning that you'll get
"Assigning the return value of new by reference is deprecated"
What needs to be done to fix it
This:
$a = &new $func($param1, $param2);
... should become:
unset($a);
$a = new $func($param1, $param2);
groetjes
Gewijzigd op 10/08/2010 19:29:56 door Martha Posthumus