|
| DErikte assingment af functionsvariabel ve~ Fra : Mikoangelo |
Dato : 02-04-05 16:14 |
|
Betragt dette script:
<?
class test {
function skriv($a = "ja", $b = "nej") {
echo "$a\n$b\n";
}
}
$foo = new test();
$foo->skriv(/*Her kommer spørgsmålet*/);
?>
Nu er problemet så, at jeg vil gerne kalde functionen skriv i klassen
test, hvor jeg sætter $b til "jo", og $a lader jeg være default.
Jeg har rodet lidt rundt i manualen, men kan ikke finde informationer
om dette. Er det muligt at gøre det, uden at skulle lave en masse
halvsemantiske hacks?
På forhånd tak for hjælpen
M k n e o g a l c m
i o g l @ m i . o
| |
Per Thomsen (03-04-2005)
| Kommentar Fra : Per Thomsen |
Dato : 03-04-05 12:05 |
|
Mikoangelo wrote:
> Betragt dette script:
>
> <?
> class test {
> function skriv($a = "ja", $b = "nej") {
> echo "$a\n$b\n";
> }
> }
>
> $foo = new test();
> $foo->skriv(/*Her kommer spørgsmålet*/);
> ?>
>
> Nu er problemet så, at jeg vil gerne kalde functionen skriv i klassen
> test, hvor jeg sætter $b til "jo", og $a lader jeg være default.
> Jeg har rodet lidt rundt i manualen, men kan ikke finde informationer
> om dette. Er det muligt at gøre det, uden at skulle lave en masse
> halvsemantiske hacks?
>
Nej, ikke uden "halvsemantiske hacks" svjv. Men med et "halvsemantisk
hack" kan man f.eks. lave det sådan:
class test {
function skriv($a=NULL, $b=NULL) {
if( $a===NULL ) { $a="ja"; }
if( $b===NULL ) { $b="nej"; }
echo "$a\n$b\n";
}
}
$foo = new test();
$foo->skriv(NULL, "jo");
MVH Per Thomsen,
http://www.pert.dk/
| |
Mikoangelo (03-04-2005)
| Kommentar Fra : Mikoangelo |
Dato : 03-04-05 12:14 |
|
Per Thomsen wrote:
> Mikoangelo wrote:
[deletia]
>
> Nej, ikke uden "halvsemantiske hacks" svjv. Men med et "halvsemantisk
> hack" kan man f.eks. lave det sådan:
>
> class test {
> function skriv($a=NULL, $b=NULL) {
> if( $a===NULL ) { $a="ja"; }
> if( $b===NULL ) { $b="nej"; }
> echo "$a\n$b\n";
> }
> }
>
> $foo = new test();
> $foo->skriv(NULL, "jo");
Ja, jeg lavede også den samme løsning, men det er lige besværligt
(og grimt) at skulle skrive $ircbot->connect(null, null, null, null,
null, null, 6667);
Er der overhovedet ingen anden løsning?
| |
Ukendt (03-04-2005)
| Kommentar Fra : Ukendt |
Dato : 03-04-05 12:34 |
|
Mikoangelo wrote:
> Ja, jeg lavede også den samme løsning, men det er lige besværligt
> (og grimt) at skulle skrive $ircbot->connect(null, null, null, null,
> null, null, 6667);
> Er der overhovedet ingen anden løsning?
Du kunne jo lave flere methode kald
$ircbot->setName(..)
$ircbot->setNick($nick,$alt) ...
$ircbot->connect($server,$port,$password);
eller bruge et array
$ircbot->connect(array(
'server' => 'irc.freenode.net',
'port => 6667,
..
)
);
| |
Mikoangelo (04-04-2005)
| Kommentar Fra : Mikoangelo |
Dato : 04-04-05 16:26 |
|
Dennis Møllegaard Pedersen wrote:
> Mikoangelo wrote:
> > Ja, jeg lavede også den samme løsning, men det er lige
besværligt
> > (og grimt) at skulle skrive $ircbot->connect(null, null, null,
null,
> > null, null, 6667);
> > Er der overhovedet ingen anden løsning?
>
> Du kunne jo lave flere methode kald
>
[deletia]
>
> eller bruge et array
>
[deletia]
Jeg tror bare, at jeg bruger an a de løsninger så.
Er der, by any chance, en løsning, der giver lidt mere mening, set fra
en programmørs, der bruger det script som et modul, synspunkt?
Men ellers tak for løsningsforslagene, allesammen.
| |
Michael Rasmussen (05-04-2005)
| Kommentar Fra : Michael Rasmussen |
Dato : 05-04-05 09:38 |
|
Mikoangelo wrote:
> Nu er problemet så, at jeg vil gerne kalde functionen skriv i klassen
> test, hvor jeg sætter $b til "jo", og $a lader jeg være default.
Jeg tror ikke det er muligt på den måde, men man kunne jo benytte
følgende fremgangsmåde i stedet:
<?php
class test {
var $a = 'ja', $b = 'nej';
function skriv() {
return "$this->a\n$this->b\n";
}
}
$foo = new test();
$foo->b = 'jo';
echo $foo->skriv();
?>
--
Michael Rasmussen, mir (at) irczone.dk http://macintosh.irczone.dk
------------------------------------------------------------------------
»If you understand what you're doing, you're not learning anything.«
-- A. L.
| |
Mikoangelo (17-04-2005)
| Kommentar Fra : Mikoangelo |
Dato : 17-04-05 07:33 |
|
Jeg har lige kommet på en ny tilgang:
Constructoren går igennem argumentlisten (argv, ikke?), og "leder" så
efter nogle konstanter. Hvis et argument kræver en værdi, sættes
denne til det næste argument.
Eksempler:
$bottie = new IrcBot(AUTO_CONNECT, HOSTNAME, 127.0.0.1);
$bottie = new IrcBot(NAME, "Arthur", Nick, "Dent");
$bottie = new IrcBot(PORT, 42, AUTO_CONNECT);
Konstanterne kan eventuelt sættes til 2potenstal
(1,2,4,8,16,32,64...), så man kan skrive
$bottie = new IrcBot(AUTO_CONNECT + JOIN_CHANNEL);
Er det muligt at lave?
| |
|
|