Autor | Zpráva | ||
---|---|---|---|
gaminn Profil * |
#1 · Zasláno: 29. 7. 2006, 17:04:27
Zdravím,
mám takovou funkci: function x($string) { return y($string); // + nějaké další instrukce } Nyní chci zavolat funkci x s parametry x('abc', 1, 2); a potřebuji, aby se tyto stejné parametry předaly i volání funkce y(), které je uvnitř x(). Nenapadá někoho, jak na to? |
||
gaminn Profil * |
#2 · Zasláno: 29. 7. 2006, 17:05:33
Jak jsem to odeslal, tak mě napadlo použít eval();, ale byl bych radši za jiné, čistší řešení.
|
||
Peca Profil |
#3 · Zasláno: 29. 7. 2006, 17:09:50
Trochu jsem to nepochopil... Kde je problém?
function x($string,$par1,$par2) { return y($string,$par1,$par2); // + nějaké další instrukce } |
||
gaminn Profil * |
#4 · Zasláno: 29. 7. 2006, 17:12:37
Jde o to, že počet argumentů funkce je neznámý, mění se podle potřeby.
Mám pořád funkci: function x($string) { return y($string); // + nějaké další instrukce } Vlám ji: x('abc', 1, 2 , 3); x('abc', 1, 2 , 3, 4, 5); x('abc', 1, 2 , 3, 4, 5, ................................, n); A v každém z těchto volání chci, aby se všechny dostupné parametry předaly i funkci y (není možné je předat třeba v poli jako jednu proměnnou, jeden parametr = jedna proměnná). |
||
Hugo Profil |
#5 · Zasláno: 29. 7. 2006, 17:13:52
To return je tam zbytečné, stačí prostě tu funkci zavolat.
|
||
gaminn Profil * |
#6 · Zasláno: 29. 7. 2006, 17:17:35
Hugo
Ne, to return tam být musí, volání funkce y vrací návratovou hodnotu funkce x. Zřejmě si nějak nerozumíme, ale přijde mi, že jsem to snad vysvětlil dobře, líp už to nepůjde :D |
||
WertriK Profil |
#7 · Zasláno: 29. 7. 2006, 17:17:46
function x($parametr) {
y($parametr); $params = explode (",", $parametr); .... } x("abc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ....., n"); |
||
Hugo Profil |
#8 · Zasláno: 29. 7. 2006, 17:20:01
gaminn
A můžeš zhruba napsat co to má přesně dělat, třeba to půjde řešit elegantněji. To co popisuješ zavání pěknou prasárnou. |
||
gaminn Profil * |
#9 · Zasláno: 29. 7. 2006, 17:20:59
WertriK
Ne, opravdu to potřebuji dostat přímo do proměnných (jeden parametr = jedna proměnná), žádná pole. |
||
gaminn Profil * |
#10 · Zasláno: 29. 7. 2006, 17:24:23
Hugo
Ale nestraš s prasárnama. public function sprintf($string) { $this->holder .= sprintf($string); } Mám takovou metodu ve třídě, pomocí které ukládám do zásobníku výstup a chci, aby ta metoda měla plnohodnotnou funkčnost, jako sprintf. ( Jasně, přímo ve skriptech bych mohl psát: $obj->holder .= sprintf('afdsdafsad %s', $prom); ale bylo by lepší, kdybych to prostě mohl napsat $obj->sprintf('afdsdafsad %s', $prom); ) |
||
thingwath Profil |
#11 · Zasláno: 29. 7. 2006, 17:24:46
Hugo
Tak zhruba nebo přesně? ;-) gaminn Tomu nevěř :-) |
||
gaminn Profil * |
#12 · Zasláno: 29. 7. 2006, 17:25:43
thingwath
Čemu? ;) |
||
thingwath Profil |
#13 · Zasláno: 29. 7. 2006, 17:27:27
|
||
gaminn Profil * |
#14 · Zasláno: 29. 7. 2006, 17:31:10
thingwath
Na tyto funkce pracujicí s parametry funkcí jsem se díval, ale otázka je - jak dostat parametry předané funkci x do y? (ve stejném počtu) |
||
Peca Profil |
#15 · Zasláno: 29. 7. 2006, 17:31:41
No nevím, ale podle mně function x($string) má právě jeden parametr. Dva parametry to prostě nevezme.
|
||
gaminn Profil * |
#16 · Zasláno: 29. 7. 2006, 17:33:11
Zkus si zavolat x('asdas', 'sdfsdf', 'sdafgasfdg'); a uvidíš, že není problém.
|
||
thingwath Profil |
#17 · Zasláno: 29. 7. 2006, 17:38:50
Asi by to chtělo ještě dynamičtěji :-)
Hele, teď mě napadá taková otázka, k čemu tuhle metodu potřebuješ, proč prostě nevoláš tu funkci? |
||
gaminn Profil * |
#18 · Zasláno: 29. 7. 2006, 17:44:13
Právě kvůli vlastnosti holder, potřebuji výstup ukládat. Jak jsem psal, mohl bych použít $obj->holder .= sprintf('afdsdafsad %s', $prom); , ale lepší by bylo prostě napsat $obj->sprintf('afdsdafsad %s', $prom); . No jak to tak vypadá, asi budu nucenej k tomu použít eval().
|
||
thingwath Profil |
#19 · Zasláno: 29. 7. 2006, 17:48:18
No, já nevím, ale tohle mi nepřijde o nic moc horší:
$obj->addString (sprintf (...)); Je to taková katastrofa? :-) |
||
gaminn Profil * |
#20 · Zasláno: 29. 7. 2006, 17:50:24
To mě taky napadlo, ale přeci jen ... $obj->sprintf(); je kratší a přehlednější... o trochu;)
|
||
thingwath Profil |
#21 · Zasláno: 29. 7. 2006, 17:54:37 · Upravil/a: thingwath
Tohle je zase obecnější, můžeš tomu zadat jakýkoliv řetězec. (to tedy u sprintf taky, ale ušetří se zbytečná funkce)
|
||
llook Profil |
#22 · Zasláno: 29. 7. 2006, 17:55:47
func_get_args() spolu s call_user_func_array() je to co hledáš:
function x($string) { |
||
gaminn Profil * |
#23 · Zasláno: 29. 7. 2006, 17:57:17
Spasitel!!!
|
||
thingwath Profil |
#24 · Zasláno: 29. 7. 2006, 17:57:33
Pascalismus.
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0