Bekijk Volledige Versie : [PHP] Optionele parameter by reference
Niels Basjes
02/11/04, 15:15
Hallo,
In PHP deed ik tot voor kort het volgende:
class foo {
function foo($bar=NULL) { ... }
}
$bla = new foo();
$bla = new foo(&$blabla);
Ik wilde hiermee de parameter $bar optioneel houden (=NULL) en als de
parameter gebruikt wordt dat deze dan by reference wordt doorgeven.
In nieuwere een PHP versie (4.3.8) geeft dit echter de melding:
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]().
If you would like to enable call-time pass-by-reference, you
can set allow_call_time_pass_reference to true in your INI file.
However, future versions may not support this any longer.
Aangezien "by value" niet het gewenste effect heeft doe ik de volgende
pogingen:
==========
Poging 1:
class foo {
function foo(&$bar=NULL) { ... }
}
$bla = new foo();
$bla = new foo($blabla);
Foutmelding:
Parse error: parse error, unexpected '=', expecting ')'
==========
Poging 2:
class foo {
function foo(&$bar) { ... }
}
$bla = new foo();
$bla = new foo($blabla);
Foutmelding:
Warning: Missing argument 1 for foo()
==========
Poging 3
class foo {
function foo() { ... }
function foo(&$bar) { ... }
}
$bla = new foo();
$bla = new foo($blabla);
Foutmelding:
Fatal error: Cannot redeclare foo()
==========
Op welke nette manier kan ik wel bereiken wat ik wil ?
--
Niels.
Drs. ir. Niels Basjes - http://niels.basjes.nl/ - VCV 20000302
mailto:`echo 'Niels Basjes'|awk '{print$1"@"$2".nl"}'`
Hacker: One who enjoys the intellectual challenge of
creatively overcoming or circumventing limitations.
Niels Basjes wrote:
> Hallo,
>
> In PHP deed ik tot voor kort het volgende:
> class foo {
> function foo($bar=NULL) { ... }
> }
> $bla = new foo();
> $bla = new foo(&$blabla);
>
> Ik wilde hiermee de parameter $bar optioneel houden (=NULL) en als de
> parameter gebruikt wordt dat deze dan by reference wordt doorgeven.
>
>
> In nieuwere een PHP versie (4.3.8) geeft dit echter de melding:
> 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]().
> If you would like to enable call-time pass-by-reference, you
> can set allow_call_time_pass_reference to true in your INI file.
> However, future versions may not support this any longer.
>
> Aangezien "by value" niet het gewenste effect heeft doe ik de volgende
> pogingen:
> ==========
> Poging 1:
> class foo {
> function foo(&$bar=NULL) { ... }
> }
> $bla = new foo();
> $bla = new foo($blabla);
>
> Foutmelding:
> Parse error: parse error, unexpected '=', expecting ')'
>
> ==========
> Poging 2:
> class foo {
> function foo(&$bar) { ... }
> }
> $bla = new foo();
> $bla = new foo($blabla);
>
> Foutmelding:
> Warning: Missing argument 1 for foo()
>
> ==========
> Poging 3
> class foo {
> function foo() { ... }
> function foo(&$bar) { ... }
> }
> $bla = new foo();
> $bla = new foo($blabla);
>
> Foutmelding:
> Fatal error: Cannot redeclare foo()
>
> ==========
>
>
> Op welke nette manier kan ik wel bereiken wat ik wil ?
>
>
Even wat ideetjes gooien:
Optie 1:
Ik weet niet waar je de variabele voor wilt gebruiken, maar er staat me
bij dat function foo ($bar=FALSE) wel werkt.
Optie 2:
Misschien niet wat je zoekt, maar de meest simpele manier lijkt me :
function foo($bar) {
if (!isset($bar) || empty($bar) ) {
$bar = NULL;
}
}
Niels Basjes
02/11/04, 18:25
On Tue, 02 Nov 2004 18:17:03 +0100, the lifeform known as "jrf[no]"
<"jrf[no]"@[spam]jokeaday.net> wrote:
>Niels Basjes wrote:
>
>> Hallo,
>>
>> In PHP deed ik tot voor kort het volgende:
>> class foo {
>> function foo($bar=NULL) { ... }
>> }
>> $bla = new foo();
>> $bla = new foo(&$blabla);
>>
>> Ik wilde hiermee de parameter $bar optioneel houden (=NULL) en als de
>> parameter gebruikt wordt dat deze dan by reference wordt doorgeven.
....
>Even wat ideetjes gooien:
>
>Optie 1:
>Ik weet niet waar je de variabele voor wilt gebruiken, maar er staat me
>bij dat function foo ($bar=FALSE) wel werkt.
Klopt, dat gebruikte ik tot op heden ook steeds en dat noemde ik ook.
Het probleem is niet de default waarden gebruiken maar de combinatie
van zowel by-reference als default waarden.
>Optie 2:
>Misschien niet wat je zoekt, maar de meest simpele manier lijkt me :
>
>function foo($bar) {
> if (!isset($bar) || empty($bar) ) {
> $bar = NULL;
> }
>}
Ook dit lost mij probleem niet op.
Dank je voor het mee denken.
--
Niels.
Drs. ir. Niels Basjes - http://niels.basjes.nl/ - VCV 20000302
mailto:`echo 'Niels Basjes'|awk '{print$1"@"$2".nl"}'`
Hacker: One who enjoys the intellectual challenge of
creatively overcoming or circumventing limitations.
Niels Basjes
02/11/04, 18:45
On Tue, 02 Nov 2004 15:04:14 +0100, the lifeform known as Niels Basjes
<NielsBasjes@example.com> wrote:
> function foo(&$bar=NULL) { ... }
> Parse error: parse error, unexpected '=', expecting ')'
Ik vind net op http://www.zend.com/manual/functions.arguments.php deze
opmerking:
Note: As of PHP 5, default values may be passed by reference.
Ok, dat wordt dus PHP upgraden.
--
Niels.
Drs. ir. Niels Basjes - http://niels.basjes.nl/ - VCV 20000302
mailto:`echo 'Niels Basjes'|awk '{print$1"@"$2".nl"}'`
Hacker: One who enjoys the intellectual challenge of
creatively overcoming or circumventing limitations.
Daniel Tryba
02/11/04, 19:35
Niels Basjes <NielsBasjes@example.com> wrote:
> Ik vind net op http://www.zend.com/manual/functions.arguments.php deze
> opmerking:
> Note: As of PHP 5, default values may be passed by reference.
>
> Ok, dat wordt dus PHP upgraden.
Of gewoon die ini aanpassing. Een upgraden naar php5 (waar by ref de
default is) zou wel eens andere effecten kunnen hebben.
--
Daniel Tryba
Niels Basjes
03/11/04, 00:45
On Tue, 2 Nov 2004 18:33:27 +0000 (UTC), the lifeform known as Daniel
Tryba <news_nl.internet.www.server-side@canopus.nl> wrote:
>Niels Basjes <NielsBasjes@example.com> wrote:
>> Ik vind net op http://www.zend.com/manual/functions.arguments.php deze
>> opmerking:
>> Note: As of PHP 5, default values may be passed by reference.
>>
>> Ok, dat wordt dus PHP upgraden.
>Of gewoon die ini aanpassing.
Ja, maar dat is alleen voor de korte termijn.
>Een upgraden naar php5 (waar by ref de
>default is) zou wel eens andere effecten kunnen hebben.
Oh vast wel. Daar ga ik vanzelf achter komen ....
--
Niels.
Drs. ir. Niels Basjes - http://niels.basjes.nl/ - VCV 20000302
mailto:`echo 'Niels Basjes'|awk '{print$1"@"$2".nl"}'`
Hacker: One who enjoys the intellectual challenge of
creatively overcoming or circumventing limitations.
"Niels Basjes" <NielsBasjes@example.com> schreef in bericht
news:hahfo0h3vhsdpjni42aq3pm3ii35raera6@4ax.com...
> On Tue, 02 Nov 2004 15:04:14 +0100, the lifeform known as Niels Basjes
> <NielsBasjes@example.com> wrote:
>
>> function foo(&$bar=NULL) { ... }
>
>> Parse error: parse error, unexpected '=', expecting ')'
>
> Ik vind net op http://www.zend.com/manual/functions.arguments.php deze
> opmerking:
> Note: As of PHP 5, default values may be passed by reference.
>
> Ok, dat wordt dus PHP upgraden.
>
>
> --
> Niels.
Hee, dat is toevallig, had ik net nog een vraagje over by-ref gepost op
nl.comp.programmeren:
<?php
function add_some_extra(&$string) {
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo "Eerste keer: $str ";
call_user_func("add_some_extra", $str);
echo ", tweede keer: $str \n";
?>
Waarom krijg ik niet twee keer wat extra's?
En dit is in php4.3.6.
--
Groeten,
Huibert.
"Huibert" <panterlb@hotmail.com> schreef in bericht
news:4188d1c9$0$28088$19deed1b@news.inter.NL.net.. .
>
>
> "Niels Basjes" <NielsBasjes@example.com> schreef in bericht
> news:hahfo0h3vhsdpjni42aq3pm3ii35raera6@4ax.com...
>> On Tue, 02 Nov 2004 15:04:14 +0100, the lifeform known as Niels Basjes
>> <NielsBasjes@example.com> wrote:
>>
>>> function foo(&$bar=NULL) { ... }
>>
>>> Parse error: parse error, unexpected '=', expecting ')'
>>
>> Ik vind net op http://www.zend.com/manual/functions.arguments.php deze
>> opmerking:
>> Note: As of PHP 5, default values may be passed by reference.
>>
>> Ok, dat wordt dus PHP upgraden.
>>
>>
>> --
>> Niels.
>
> Hee, dat is toevallig, had ik net nog een vraagje over by-ref gepost op
> nl.comp.programmeren:
>
>
> <?php
>
> function add_some_extra(&$string) {
> $string .= 'and something extra.';
> }
>
> $str = 'This is a string, ';
>
> add_some_extra($str);
>
> echo "Eerste keer: $str ";
>
>
> call_user_func("add_some_extra", $str);
>
> echo ", tweede keer: $str \n";
>
> ?>
>
> Waarom krijg ik niet twee keer wat extra's?
>
> En dit is in php4.3.6.
>
> --
> Groeten,
> Huibert.
"Ewoud Dronkert" <me@privacy.net> schreef in bericht
news:c3lho05nbfmls9c2t1q547dj6hbsmcj6mt@4ax.com...
> On Wed, 3 Nov 2004 11:43:39 +0100, Huibert wrote:
>> call_user_func("add_some_extra", $str);
>> Waarom krijg ik niet twee keer wat extra's?
>
> Het staat gedocumenteerd:
> http://nl.php.net/manual/en/function.call-user-func.php
>
> Je kunt het omzeilen door een functienaam-variabele te gebruiken:
>
> mijnfunctie( $a ) { echo $a; }
> $f = "mijnfunctie";
> $f( "Hello" );
>
Ha dom van me, had ik zelf kunnen vinden.... Dank je!
--
Groeten,
Huibert.