PHP error na overzetting naar 5.3

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martha Posthumus

Martha Posthumus

06/08/2010 15:31:12
Quote Anchor link
Hallo mensen,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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 };?>


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
 
PHP hulp

PHP hulp

29/03/2024 14:41:32
 
Johan Dam

Johan Dam

06/08/2010 15:34:59
Quote Anchor link
'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?
 
Martha Posthumus

Martha Posthumus

06/08/2010 15:42:57
Quote Anchor link
Bedankt Johan,

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
 
- SanThe -

- SanThe -

06/08/2010 16:59:29
Quote Anchor link
Wat ik mij afvraag of het weglaten van de & verder geen gevolgen heeft. Kan dit zomaar?
 
Pieter Jansen

Pieter Jansen

06/08/2010 17:02:32
Quote Anchor link
Waarom was die & er eigenlijk? Betekende toch dat je dat object forceert? Ook als die een error geeft?
 
Martijn B

Martijn B

06/08/2010 17:03:38
Quote Anchor link
Ja, omdat $params in dit voorbeeld altijd een verwijzing (reference) is naar het mosParameters object.

Ofwel geef je $params mee als functie parameter.
Dan heb je binnen de functie nog steeds temaken met hetzelfde mosParameters object.
 
- Raoul -

- Raoul -

06/08/2010 19:34:51
Quote Anchor link
Of gewoon de nieuwe versie van Joomla installeren???
 
Martha Posthumus

Martha Posthumus

06/08/2010 21:17:20
Quote Anchor link
Volgens mij is Joomla 1.5.15 de goeie versie die samengaat met PHP 5.3.
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.
 
Martha Posthumus

Martha Posthumus

08/08/2010 11:53:27
Quote Anchor link
Ik heb deze uitleg nog gevonden op 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.
 
Pim -

Pim -

08/08/2010 22:47:16
Quote Anchor link
Tegenwoordig (php5) zijn assingments (=) met objecten altijd by-reference. Dit houd in dat de waarde niet gekopieerd wordt, maar de verwijzing naar die waarde. Bij alle andere soorten variabelen wordt de waarde gekopieerd. Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$a
= new stdClass;
$b = $a;
$b->test = 'test';
var_dump($a->test == 'test'); // Geeft true

$a = 10;
$b = $a;
$b = 5;
var_dump($a == 5); // Geeft false

// =& geeft altijd by-reference, ook bij niet-objecten

$a = 10;
$b =& $a;
$b = 5;
var_dump($a == 5); // Geeft true
?>
Gewijzigd op 08/08/2010 22:48:54 door Pim -
 
Martha Posthumus

Martha Posthumus

10/08/2010 19:29:09
Quote Anchor link
Ik heb dit ook nog gevonden als fix voor & voor new:


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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.