/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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?


Søg
Reklame
Statistik
Spørgsmål : 177517
Tips : 31968
Nyheder : 719565
Indlæg : 6408636
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste