ugrás a tartalomhoz

Return By Reference Notice

Nagy Péter · 2005. Aug. 9. (K), 13.47
Üdv!

Az alábbi kóddal van problémám:
function &Validator(){
if ( isset($GLOBALS['_VALIDATOR_POOL']) ) {
           return $GLOBALS['_VALIDATOR_POOL'];
}
}

PHP 4.4.0-nál előjön a sokat emlegetett Notice:
Notice: Only variable references should be returned by reference in d:\phpIncludes\includes\validator.class.php on line 58

Utánna olvastam, de nem lettem okosabb. A SitePoint-on csak annyit írnak, hogy új objektum készítésekor bír ez előjönni, ha referenciaként akarok visszadni egy épp példányosított osztályt:
function &getnodecontrol($objecttype)
{
require_once(RESOURCE_DIR . "nodecontrols/$objecttype.inc.php");
return new $objecttype($this->db);
}

Elolvastam az ott emlegetett "workaround"-ot és a saját kódomat imígyen egészítettem ki:
function &Validator(){
if ( isset($GLOBALS['_VALIDATOR_POOL']) ) {
$ref = & $GLOBALS['_VALIDATOR_POOL'];
return $ref;
}
}


De ez sem tetszik neki. Akkor mi a teendőm?
 
1

<Nincs cím>

Hodicska Gergely · 2005. Aug. 10. (Sze), 10.18
Szia!


Nem nézel el valamit? Erre nem kéne ezt a notice-t adnia. A lenti például nálam nem okoz gondot.
<?php
	function &foo()
	{
		return $GLOBALS['meg_csak_nem_is_van_ilyen'];
	}

	$bar =& foo();
	$bar = foo();
?>
Amúgy a program szempontjából szerencsésebb lenne a singleton pattern használata: php4 és php5 féle megvalósítás.


Felhő
2

Mi a kérdés?

Webappz · 2005. Aug. 10. (Sze), 10.28
Most egy objektum referenciáját akarod visszakapni?
Akkor előtte példányosítani kellene:
@$ref = & new $GLOBALS['_VALIDATOR_POOL'];
return $ref;

szerintem :-)

Üdvözlettel: Webappz
3

Mielőtt a másikat hülyének nézzük...

Hodicska Gergely · 2005. Aug. 10. (Sze), 10.49
...olvassunk inkább. ;-)

Ami meg a kódodat illet, hát nem ez a módja a hibák kezelésének. Egy ilyen felesleges @-cal komoly dubug sessiont generálhatsz magadnak, vagy kollégádnak.


Felhő
4

Bocsánat

Webappz · 2005. Aug. 10. (Sze), 12.17
Nem hinném, hogy akárkit is hülyének néztem, különben elnézést kérek, ha ezt valaki így érezte. Én nem komplett kódot adtam és valóban nem volt lekezelve a dolog, meg előtte még lehetett volna 1-2 vizsgálatot megejteni.
Bocsánat, hogy merészeltem válaszolni egy kérdésre :-)
Üdvözlettel: Webappz