Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

References et nombre variable d'arguments

2 réponses
Avatar
Zouplaz
Bonjour, j'ai depuis pas mal de temps un soucis avec un point précis :
comment puis-je créer une fonction qui accepte un nombre variable
d'arguments tout en conservant une référence sur les arguments...

Je m'explique, voici ma fonction :

function addObjects()
{
for($i=0;$i<func_num_args();$i++)
{
$obj =& func_get_arg($i);
if(is_null($obj))
die("class_base.addObjects : can't add a NULL
object.");
$obj->parent = &$this;
$this->objects[] = &$obj;
}
}


L'appel de addObjects sous la forme
$truc->addObjects(&$obj);

provoque for logiquement le warning : Call-time pass-by-reference has
been deprecated - argument passed by value; If you would like to pass it
by reference, modify the declaration of [runtime function name]().

Le problème c'est que comme il n'y a pas d'arguments dans la déclaration
de la fonction, je peux pas ajouter un & devant tel ou tel argument.

Je ne vois pas comment faire, et pourtant il m'est bien pratique d'écrire
:

$truc->addObjects($obj1,$obj2,$obj3,$obj4);


La seule solution que je vois consisterait à utiliser un array :

$objects[] =& $obj1;
$objects[] =& $obj2;
$objects[] =& $obj3;
$objects[] =& $obj4;
$truc->addObjects($objects); avec addObject déclarée comme addObjects(&
$objArray)

Mais c'est aussi bavard que

$truc->addObject($obj1)
$truc->addObject($obj2)
$truc->addObject($obj3)
$truc->addObject($obj4)

si addObject était désormais déclarée comme addObject(&$obj)

Ou alors, peut-être :
$truc->addObjects(array(&$obj1,&$obj2,&$obj3)) ??

Qu'en pensez vous ?

2 réponses

Avatar
bruno modulix
Zouplaz wrote:
(snip)
Ou alors, peut-être :
$truc->addObjects(array(&$obj1,&$obj2,&$obj3)) ??

Qu'en pensez vous ?


Rien - si ce n'est que je ne vois guère d'autre solution propre et
compréhensible.

--
bruno desthuilliers
ruby -e "print ''.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"

Avatar
Frederic Rouchouze
L'appel de addObjects sous la forme
$truc->addObjects(&$obj);
provoque for logiquement le warning : Call-time pass-by-reference has
been deprecated - argument passed by value; If you would like to pass it
by reference, modify the declaration of [runtime function name]().

Je ne vois pas comment faire, et pourtant il m'est bien pratique d'écrire


J'ai rencontré le même problème ! Si quelqu'un a une solution correcte, ça
m'intéresse...
--
Frédéric Rouchouze
mailto: