Avatar billede mungojerrie Nybegynder
04. juni 2004 - 14:04 Der er 15 kommentarer og
1 løsning

valgfri parametre i function kald

Hvis jeg gerne vil lave en funktion i php, hvor jeg ikke nødvendigvis altid vil kalde funktionen med alle parametre, hvordan gør jeg det så ?

function getTextField($class=null, $title, $type, $name, $size, $maxlength, $value=null){
    $html = "
    <table border='0' cellspacing='1' cellpadding='1' width='100%' class='$class'>
    <tr>
      <td><br>$title:<br><input type='$type' name='$name' size='$size' maxlength='$maxlength' value='$value'></td>
    </tr>
    </table>\n";
    return $html;
}
Avatar billede dennismp Nybegynder
04. juni 2004 - 14:10 #1
Jeg ser du kender til default-paramter.. Alternativ kan du kigge på func_num_args() ..

function() {
  $numargs = func_num_args();
  echo "Number of arguments: $numargs<br />\n";
  if ($numargs >= 2) {
      echo "Second argument is: " . func_get_arg(1) . "<br />\n";
  }
  $arg_list = func_get_args();
  for ($i = 0; $i < $numargs; $i++) {
      echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
  }
}

eller du kan bruge et array.

function getTextField($title,$attrib) {
  if( isset($attrib['size']) )
      gør noget
}

og så kaldes den: getTextField('tomat',array('size'=>7,'value'=>'Jatak'));
Avatar billede mungojerrie Nybegynder
04. juni 2004 - 14:13 #2
hmm, hvordan skulle jeg så kalde den function jeg vedhæftede ?
Avatar billede taskmgr Nybegynder
04. juni 2004 - 14:17 #3
<?php

function foo($foo, $bar = "bar")
{
  return $foo.$bar;
}

echo foo("foo");
// = 'foobar'

echo foo("foo","bar2");
// = 'foobar2'

?>
Avatar billede dennismp Nybegynder
04. juni 2004 - 14:18 #4
Du skal lige flytte $class til slutningen..

function getTextField($title, $type, $name, $size, $maxlength, $value=null, $class=null){

..

så kan du kalde den med

getTextField('title','type','name',26,26);
eller
getTextField('title','type','name',26,26,'Værdi');
eller
getTextField('title','type','name',26,26,'Værdi','fancy');
eller
getTextField('title','type','name',26,26,null,'fancy');
Avatar billede jakoba Nybegynder
04. juni 2004 - 14:20 #5
function getTextField(
    $class=null,          // denne kan ikke være valgfri
    $title,                // hvis den udelades vil $title blive set som $class
    $type,                // og $type set som $title
    $name,                // osv
    $size,
    $maxlength,
    $value=null){

php laver jo typekonvertering som den finder nødvendigt så det vil stadig (måske) være et forståeligt kald.

valgfri parametre skal være sidst i parameterlisten. og når du udelader nogen af dem skal det ske med den bagerste først.

mvh JakobA
Avatar billede mungojerrie Nybegynder
04. juni 2004 - 14:26 #6
ahh, så faldt ti-øren :-)

Smid lige et svar I to...
Avatar billede mungojerrie Nybegynder
04. juni 2004 - 14:57 #7
ja, det er dog lige et lille problem:

Kaldet ser sådan ud:

getTextField("Navn", "text", "navn", 30, 30, null, "Jan");

functionen:

function getTextField($title, $type, $name, $size, $maxlength, $class=null, $value=null){
    $html = "
    <table border='0' cellspacing='1' cellpadding='1' width='100%' class='$class'>
    <tr>
      <td><br>$title:<br><input type='$type' name='$name' size='$size' maxlength='$maxlength' value='$value'></td>
    </tr>
    </table>\n";
    return $html;
}

Resultatet af funmtionen:

    <table border='0' cellspacing='1' cellpadding='1' width='100%' class='Jan'>
    <tr>
      <td><br>Navn:<br><input type='text' name='navn' size='30' maxlength='30' value=''></td>
    </tr>
    </table>

Det duer jo ikke helt....
Avatar billede taskmgr Nybegynder
04. juni 2004 - 15:14 #8
Her får jeg 'Jan' i value og ingenting i class (class='')

Kører du en gammel PHP version?
Avatar billede mungojerrie Nybegynder
04. juni 2004 - 15:17 #9
tja, det er en version 4.1.2
Avatar billede taskmgr Nybegynder
04. juni 2004 - 15:19 #10
Så er det sikkert en bug... Den er oppe på 4.3.7 nu
Avatar billede mungojerrie Nybegynder
04. juni 2004 - 15:21 #11
ja, men jeg kan desværre ikke opgradere, er kun webmaster
Avatar billede taskmgr Nybegynder
04. juni 2004 - 15:30 #12
Så kan du jo gøre således istedet:
getTextField("Navn", "text", "navn", 30, 30, "", "Jan");

Men Jeg ville nu foretrække at tage fat i den server-ansvarlige.
Avatar billede mungojerrie Nybegynder
04. juni 2004 - 15:36 #13
Det har jeg nu også afprøvet uden held, men hvis jeg i stedet bytter rundt på "value" og "class" kan jeg godt klare mig med det......

Serveren står på et kollegie og der er mange brugere, så en opgradering vil berøre rigtig mange.....
Avatar billede dennismp Nybegynder
04. juni 2004 - 18:04 #14
Well - jeg ville nok skrive til system adm. og anbefale ham at opgraderer. Der har været nogle sikkerhedsmæssige huller i PHP som er blevet retter efter 4.1.2..

Men det hjælper dig jo ikke meget her og nu :)
Avatar billede mungojerrie Nybegynder
22. juni 2004 - 09:50 #15
smid lige et svar I to........
Avatar billede dennismp Nybegynder
22. juni 2004 - 18:30 #16
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester