Autor | Zpráva | ||
---|---|---|---|
Budulinek Profil |
#1 · Zasláno: 8. 1. 2010, 10:35:08
Zdravím,
napadlo mě, zda-li jde přeskočit defaultně nastavený argument funkce, aniž by se změnila jeho přednastavená hodnota? Jinak řečeno, mám funkci nejaka_funkce($arg_a, $arg_b, $arg_c = 123, $arg_d = 987) {...} při jejímž volání bych chtěl nastavit třeba jen argument d ($arg_d), ale argument c bych chtěl nechat tak, jak je. Můžu zavolat tu funkci nějak tak, aby bych nastavení argumentu c přeskočil? Třeba takto: nejaka_funkce("a", "b", //o to se nestarej//, 567); Jde to, nebo je v tomto případě potřeba argument vypasta ručně? Díky za rady a postřehy :) |
||
Nox Profil |
#2 · Zasláno: 8. 1. 2010, 10:40:15
Pokud vím tak to není možné.... ale pokud funkce očekává nějaké neprázdné hodnoty, tak můžeš uvést u "přeskakovaných" NULL a pak kontrolovat is_null() nebo === NULL
nebo to udělat pomocí pole.... ale je to pak hodně psaní navíc |
||
Budulinek Profil |
#3 · Zasláno: 8. 1. 2010, 10:49:31
Nox:
o null vím, ale to není to co, co bych chtěl. Myslel jsem si, že to nejde, ale líná huba... však to znáte. |
||
Mastodont Profil |
#4 · Zasláno: 8. 1. 2010, 11:37:36
Můžeš to udělat tak, že argumenty v hlavičce neuvedeš vůbec a v těle funkce pak použiješ func_num_args a func_get_args, ovšem zkomplikuje ti to kód uvnitř funkce..
|
||
Joker Profil |
#5 · Zasláno: 8. 1. 2010, 11:50:04
Mastodont:
Tím ovšem taky nejde přeskakovat argumenty. Pak by v životě nepoznal, jestli func_get_args(2) je $arg_c, nebo jsem ho přeskočil a je to až $arg_d. Možné řešení, byť ne úplně hezké, by bylo předávat argumenty jako pole: nejaka_funkce($argumenty){ ... } nejaka_funkce(array("a", "b", 4=>999)); |
||
Budulinek Profil |
#6 · Zasláno: 8. 1. 2010, 12:34:09
Joker:
Taky mě to napadlo, ale asi to nechám tak, jak to je. Ono šlo čistě jen o nepatrný zjednodušení a nemá cenu nad tím nějak hloubat. Řešení s polem sice problém řeší, ale ve finále by to asi vyšlo na stejnou, jako když by se ty argumenty vypisovaly. |
||
Alphard Profil |
#7 · Zasláno: 8. 1. 2010, 22:03:38
[#1] Budulinek
Nebo to udělat objektově, třeba $o = new Obrazek("png", 200); // povinný $o->backgroundColor = "blue"; // nepovinný $o->safe(); Tohle asi bude řešení málokdy, ale uvádím ho pro úplnost. |
||
Časová prodleva: 14 let
|
0