PDA

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.

jrf[no]
02/11/04, 18:25
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.

Huibert
03/11/04, 13:45
"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
03/11/04, 15:05
"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.