Soit une fonction à param. variant
que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
a) est-ce que /null/ est une "bonne valeur par défaut" ?
(j'ai l'impression que cela créé localement un variable
$a initialisée à null).
b) comment savoir si un paramètre est effectivement transmis?
isset($a), ($a == null) ne semble pas permettre de décider.
nota: j'ai bien lu §17 "Making arguments be passed by reference"
et "Default argument values", mais je n'ai trouvé aucun passage
combinant les 2.
Soit une fonction à param. variant
que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
a) est-ce que /null/ est une "bonne valeur par défaut" ?
(j'ai l'impression que cela créé localement un variable
$a initialisée à null).
b) comment savoir si un paramètre est effectivement transmis?
isset($a), ($a == null) ne semble pas permettre de décider.
nota: j'ai bien lu §17 "Making arguments be passed by reference"
et "Default argument values", mais je n'ai trouvé aucun passage
combinant les 2.
Soit une fonction à param. variant
que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
a) est-ce que /null/ est une "bonne valeur par défaut" ?
(j'ai l'impression que cela créé localement un variable
$a initialisée à null).
b) comment savoir si un paramètre est effectivement transmis?
isset($a), ($a == null) ne semble pas permettre de décider.
nota: j'ai bien lu §17 "Making arguments be passed by reference"
et "Default argument values", mais je n'ai trouvé aucun passage
combinant les 2.
Soit une fonction à param. variant que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
a) est-ce que /null/ est une "bonne valeur par défaut" ?
(j'ai l'impression que cela créé localement un variable
$a initialisée à null).
nota: j'ai bien lu §17 "Making arguments be passed by reference"
et "Default argument values", mais je n'ai trouvé aucun passage
combinant les 2.
Soit une fonction à param. variant que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
a) est-ce que /null/ est une "bonne valeur par défaut" ?
(j'ai l'impression que cela créé localement un variable
$a initialisée à null).
nota: j'ai bien lu §17 "Making arguments be passed by reference"
et "Default argument values", mais je n'ai trouvé aucun passage
combinant les 2.
Soit une fonction à param. variant que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
a) est-ce que /null/ est une "bonne valeur par défaut" ?
(j'ai l'impression que cela créé localement un variable
$a initialisée à null).
nota: j'ai bien lu §17 "Making arguments be passed by reference"
et "Default argument values", mais je n'ai trouvé aucun passage
combinant les 2.
Sylvain SF a écrit :Soit une fonction à param. variant que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
Tu confonds deux notions : les fonctions à paramètres ayant une valeur
par défaut et les fonctions variadiques (comme en C).
Tout d'abord, faire une référence à null en PHP5 est interdit.
effet, il n'est possible de ne passer que des variables par référence.
null étant un scalaire, ce n'est pas une variable. Ton code par défaut
lèvera une Fatal error « Only variables can be passed by reference »
Quand aux fonctions à nombre variables d'arguments
a) est-ce que /null/ est une "bonne valeur par défaut" ?
Oui, mais pas pour une référence ;)
C'est parce que tu ne regardais pas au bon endroit ;)
<http://fr.php.net/manual/en/book.funchand.php>
Sylvain SF a écrit :
Soit une fonction à param. variant que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
Tu confonds deux notions : les fonctions à paramètres ayant une valeur
par défaut et les fonctions variadiques (comme en C).
Tout d'abord, faire une référence à null en PHP5 est interdit.
effet, il n'est possible de ne passer que des variables par référence.
null étant un scalaire, ce n'est pas une variable. Ton code par défaut
lèvera une Fatal error « Only variables can be passed by reference »
Quand aux fonctions à nombre variables d'arguments
a) est-ce que /null/ est une "bonne valeur par défaut" ?
Oui, mais pas pour une référence ;)
C'est parce que tu ne regardais pas au bon endroit ;)
<http://fr.php.net/manual/en/book.funchand.php>
Sylvain SF a écrit :Soit une fonction à param. variant que l'on souhaite
pouvoir appeler sans transmettre de paramètre:
function foo(&$a = null){ ... }
Tu confonds deux notions : les fonctions à paramètres ayant une valeur
par défaut et les fonctions variadiques (comme en C).
Tout d'abord, faire une référence à null en PHP5 est interdit.
effet, il n'est possible de ne passer que des variables par référence.
null étant un scalaire, ce n'est pas une variable. Ton code par défaut
lèvera une Fatal error « Only variables can be passed by reference »
Quand aux fonctions à nombre variables d'arguments
a) est-ce que /null/ est une "bonne valeur par défaut" ?
Oui, mais pas pour une référence ;)
C'est parce que tu ne regardais pas au bon endroit ;)
<http://fr.php.net/manual/en/book.funchand.php>
C'est parce que tu ne regardais pas au bon endroit
<http://fr.php.net/manual/en/book.funchand.php>
cela n'a rien à voir.
C'est parce que tu ne regardais pas au bon endroit
<http://fr.php.net/manual/en/book.funchand.php>
cela n'a rien à voir.
C'est parce que tu ne regardais pas au bon endroit
<http://fr.php.net/manual/en/book.funchand.php>
cela n'a rien à voir.
le but est bien (ici) d'avoir un seul(!) paramètre variant (passé par
référence).
le proto n'est pas variadique, si tu lis bien les *accolades* et non
les parenthèses, tu liras que le corps de la fonction est ici sans
objet (ou presque), peut être que l'écriture suivante permettra de
limiter les mauvaises interprétations:
function foo(&$a = null)
{
// il y a surement un corps de fonction
// mais ce n'est pas l'objet de la question
}Tout d'abord, faire une référence à null en PHP5 est interdit.
je ne sais pas ce que voudrais dire "faire une référence" !
"transmettre une référence nulle" ou mieux inexistante devrait
être interdit / impossible, je m'attendais à cela, ce n'est pas le cas.
nullement, as-tu essayé ?
et pas la moindre fatal error.
or en effet, la référence à un "$a" quand rien n'est transmis ne devrait
pas exister.
Quand aux fonctions à nombre variables d'arguments
elles ne sont pas le sujet.
alors on mets quoi ?
en clair, quelle est l'approche la plus PHP possible de:
/* code C++ */
void foo(int* i = NULL)
{
if (i)
*i++;
}
C'est parce que tu ne regardais pas au bon endroit ;)
<http://fr.php.net/manual/en/book.funchand.php>
cela n'a rien à voir.
le but est bien (ici) d'avoir un seul(!) paramètre variant (passé par
référence).
le proto n'est pas variadique, si tu lis bien les *accolades* et non
les parenthèses, tu liras que le corps de la fonction est ici sans
objet (ou presque), peut être que l'écriture suivante permettra de
limiter les mauvaises interprétations:
function foo(&$a = null)
{
// il y a surement un corps de fonction
// mais ce n'est pas l'objet de la question
}
Tout d'abord, faire une référence à null en PHP5 est interdit.
je ne sais pas ce que voudrais dire "faire une référence" !
"transmettre une référence nulle" ou mieux inexistante devrait
être interdit / impossible, je m'attendais à cela, ce n'est pas le cas.
nullement, as-tu essayé ?
et pas la moindre fatal error.
or en effet, la référence à un "$a" quand rien n'est transmis ne devrait
pas exister.
Quand aux fonctions à nombre variables d'arguments
elles ne sont pas le sujet.
alors on mets quoi ?
en clair, quelle est l'approche la plus PHP possible de:
/* code C++ */
void foo(int* i = NULL)
{
if (i)
*i++;
}
C'est parce que tu ne regardais pas au bon endroit ;)
<http://fr.php.net/manual/en/book.funchand.php>
cela n'a rien à voir.
le but est bien (ici) d'avoir un seul(!) paramètre variant (passé par
référence).
le proto n'est pas variadique, si tu lis bien les *accolades* et non
les parenthèses, tu liras que le corps de la fonction est ici sans
objet (ou presque), peut être que l'écriture suivante permettra de
limiter les mauvaises interprétations:
function foo(&$a = null)
{
// il y a surement un corps de fonction
// mais ce n'est pas l'objet de la question
}Tout d'abord, faire une référence à null en PHP5 est interdit.
je ne sais pas ce que voudrais dire "faire une référence" !
"transmettre une référence nulle" ou mieux inexistante devrait
être interdit / impossible, je m'attendais à cela, ce n'est pas le cas.
nullement, as-tu essayé ?
et pas la moindre fatal error.
or en effet, la référence à un "$a" quand rien n'est transmis ne devrait
pas exister.
Quand aux fonctions à nombre variables d'arguments
elles ne sont pas le sujet.
alors on mets quoi ?
en clair, quelle est l'approche la plus PHP possible de:
/* code C++ */
void foo(int* i = NULL)
{
if (i)
*i++;
}
C'est parce que tu ne regardais pas au bon endroit ;)
<http://fr.php.net/manual/en/book.funchand.php>
cela n'a rien à voir.
Sylvain SF a écrit :le but est bien (ici) d'avoir un seul(!) paramètre variant (passé par
référence).
Qu'est-ce que tu appelles « variant » ?
J'avais bien compris que tes ... ne devaient pas être confondus avec
la liste de paramètres. [...]
Tout d'abord, faire une référence à null en PHP5 est interdit.
je ne sais pas ce que voudrais dire "faire une référence" !
<http://fr2.php.net/manual/en/language.references.php>
"transmettre une référence nulle" ou mieux inexistante devrait
être interdit / impossible, je m'attendais à cela, ce n'est pas le cas.
Ça l'est. Tu es tombé sur un bogue.[...]
Vivi, c'est aussi un bogue pour moi. Car si tu écris foo(null), il
couine. Toi aussi tu as le droit de contribuer <http://bugs.php.net/> ;)
Quand aux fonctions à nombre variables d'arguments
elles ne sont pas le sujet.
Ben si, le seul moyen de savoir si on a passé un argument est de
demander combien d'arguments ont été passés à la fonction. Et pour
connaître ce nombre, il faut utiliser func_num_args.
en clair, quelle est l'approche la plus PHP possible de:
/* code C++ */
Les pointeurs n'existent pas en PHP, et les références n'en sont pas
l'équivalent. Les références en PHP5 se comportent comme les références
de Java. Mais pas comme celles de C++, ce serait plutôt équivalent à un
std::auto_ptr.
Sylvain SF a écrit :
le but est bien (ici) d'avoir un seul(!) paramètre variant (passé par
référence).
Qu'est-ce que tu appelles « variant » ?
J'avais bien compris que tes ... ne devaient pas être confondus avec
la liste de paramètres. [...]
Tout d'abord, faire une référence à null en PHP5 est interdit.
je ne sais pas ce que voudrais dire "faire une référence" !
<http://fr2.php.net/manual/en/language.references.php>
"transmettre une référence nulle" ou mieux inexistante devrait
être interdit / impossible, je m'attendais à cela, ce n'est pas le cas.
Ça l'est. Tu es tombé sur un bogue.
[...]
Vivi, c'est aussi un bogue pour moi. Car si tu écris foo(null), il
couine. Toi aussi tu as le droit de contribuer <http://bugs.php.net/> ;)
Quand aux fonctions à nombre variables d'arguments
elles ne sont pas le sujet.
Ben si, le seul moyen de savoir si on a passé un argument est de
demander combien d'arguments ont été passés à la fonction. Et pour
connaître ce nombre, il faut utiliser func_num_args.
en clair, quelle est l'approche la plus PHP possible de:
/* code C++ */
Les pointeurs n'existent pas en PHP, et les références n'en sont pas
l'équivalent. Les références en PHP5 se comportent comme les références
de Java. Mais pas comme celles de C++, ce serait plutôt équivalent à un
std::auto_ptr.
Sylvain SF a écrit :le but est bien (ici) d'avoir un seul(!) paramètre variant (passé par
référence).
Qu'est-ce que tu appelles « variant » ?
J'avais bien compris que tes ... ne devaient pas être confondus avec
la liste de paramètres. [...]
Tout d'abord, faire une référence à null en PHP5 est interdit.
je ne sais pas ce que voudrais dire "faire une référence" !
<http://fr2.php.net/manual/en/language.references.php>
"transmettre une référence nulle" ou mieux inexistante devrait
être interdit / impossible, je m'attendais à cela, ce n'est pas le cas.
Ça l'est. Tu es tombé sur un bogue.[...]
Vivi, c'est aussi un bogue pour moi. Car si tu écris foo(null), il
couine. Toi aussi tu as le droit de contribuer <http://bugs.php.net/> ;)
Quand aux fonctions à nombre variables d'arguments
elles ne sont pas le sujet.
Ben si, le seul moyen de savoir si on a passé un argument est de
demander combien d'arguments ont été passés à la fonction. Et pour
connaître ce nombre, il faut utiliser func_num_args.
en clair, quelle est l'approche la plus PHP possible de:
/* code C++ */
Les pointeurs n'existent pas en PHP, et les références n'en sont pas
l'équivalent. Les références en PHP5 se comportent comme les références
de Java. Mais pas comme celles de C++, ce serait plutôt équivalent à un
std::auto_ptr.
function foo(&$a = null){
$a++;
}
$k = 0;
echo $k;
foo($k);
echo $k;
foo();
echo $k;
affiche:
0
1
1
et pas la moindre fatal error.
or en effet, la référence à un "$a" quand rien n'est transmis ne devrait
pas exister.
function foo(&$a = null){
$a++;
}
$k = 0;
echo $k;
foo($k);
echo $k;
foo();
echo $k;
affiche:
0
1
1
et pas la moindre fatal error.
or en effet, la référence à un "$a" quand rien n'est transmis ne devrait
pas exister.
function foo(&$a = null){
$a++;
}
$k = 0;
echo $k;
foo($k);
echo $k;
foo();
echo $k;
affiche:
0
1
1
et pas la moindre fatal error.
or en effet, la référence à un "$a" quand rien n'est transmis ne devrait
pas exister.
As-tu regardé là ? (note #3, exemple #2) :
http://fr.php.net/manual/fr/language.references.whatdo.php
As-tu regardé là ? (note #3, exemple #2) :
http://fr.php.net/manual/fr/language.references.whatdo.php
As-tu regardé là ? (note #3, exemple #2) :
http://fr.php.net/manual/fr/language.references.whatdo.php
c'est explicité dans la texte quoté ("passé par référence",
soit "non par valeur"). je ne pensais pas ce terme ambigu.
hmmm, je sais ce qu'est une référence, merci.
par contre "faire une référence" ?!... (faire et avoir ne
sont pas les verbes les plus explicites).
bien sur, il traite correctement le passage (effectif) de tout scalaire
(dont 'null') et l'interdit; mais la possibilité de définir une valeur
par défaut pour une variable-référence est ambigue (pas nécessairement
un "bug", juste "ambigu", ce support est peut être voulu mais je ne
trouve aucun exemple ni commentaire dans les docs).
on va dire que je sais ce qu'est un pointeur ou une réf, hein.
une réf. Java est toujours une instance or ici on parle (aussi)
de scalaire passé par référence ce qui n'existe pas en Java.
le '&$' de PHP ressemble plus au '&' de C++ et lui interdirait
foo(type& x = /scalar/).
c'est explicité dans la texte quoté ("passé par référence",
soit "non par valeur"). je ne pensais pas ce terme ambigu.
hmmm, je sais ce qu'est une référence, merci.
par contre "faire une référence" ?!... (faire et avoir ne
sont pas les verbes les plus explicites).
bien sur, il traite correctement le passage (effectif) de tout scalaire
(dont 'null') et l'interdit; mais la possibilité de définir une valeur
par défaut pour une variable-référence est ambigue (pas nécessairement
un "bug", juste "ambigu", ce support est peut être voulu mais je ne
trouve aucun exemple ni commentaire dans les docs).
on va dire que je sais ce qu'est un pointeur ou une réf, hein.
une réf. Java est toujours une instance or ici on parle (aussi)
de scalaire passé par référence ce qui n'existe pas en Java.
le '&$' de PHP ressemble plus au '&' de C++ et lui interdirait
foo(type& x = /scalar/).
c'est explicité dans la texte quoté ("passé par référence",
soit "non par valeur"). je ne pensais pas ce terme ambigu.
hmmm, je sais ce qu'est une référence, merci.
par contre "faire une référence" ?!... (faire et avoir ne
sont pas les verbes les plus explicites).
bien sur, il traite correctement le passage (effectif) de tout scalaire
(dont 'null') et l'interdit; mais la possibilité de définir une valeur
par défaut pour une variable-référence est ambigue (pas nécessairement
un "bug", juste "ambigu", ce support est peut être voulu mais je ne
trouve aucun exemple ni commentaire dans les docs).
on va dire que je sais ce qu'est un pointeur ou une réf, hein.
une réf. Java est toujours une instance or ici on parle (aussi)
de scalaire passé par référence ce qui n'existe pas en Java.
le '&$' de PHP ressemble plus au '&' de C++ et lui interdirait
foo(type& x = /scalar/).
Je reviendrais quand j'aurais des réponses pertinentes sur la ML.
Je reviendrais quand j'aurais des réponses pertinentes sur la ML.
Je reviendrais quand j'aurais des réponses pertinentes sur la ML.