Autor Zpráva
gaminn
Profil *
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 *
Jak jsem to odeslal, tak mě napadlo použít eval();, ale byl bych radši za jiné, čistší řešení.
Peca
Profil
Trochu jsem to nepochopil... Kde je problém?
function x($string,$par1,$par2) {
return y($string,$par1,$par2); // + nějaké další instrukce
}
gaminn
Profil *
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
To return je tam zbytečné, stačí prostě tu funkci zavolat.


function x($string,$par1,$par2) {
y($string,$par1,$par2);
nejaka_jina_funkce();
}
gaminn
Profil *
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
function x($parametr) {

y($parametr);

$params = explode (",", $parametr);
....


}


x("abc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ....., n");
Hugo
Profil
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 *
WertriK

Ne, opravdu to potřebuji dostat přímo do proměnných (jeden parametr = jedna proměnná), žádná pole.
gaminn
Profil *
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
Hugo
Tak zhruba nebo přesně? ;-)

gaminn
Tomu nevěř :-)
gaminn
Profil *
thingwath

Čemu? ;)
thingwath
Profil
http://www.php.net/manual/cs/functions.arguments.php#functions.variabl e-arg-list
gaminn
Profil *
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
No nevím, ale podle mně function x($string) má právě jeden parametr. Dva parametry to prostě nevezme.
gaminn
Profil *
Zkus si zavolat x('asdas', 'sdfsdf', 'sdafgasfdg'); a uvidíš, že není problém.
thingwath
Profil
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 *
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
No, já nevím, ale tohle mi nepřijde o nic moc horší:

$obj->addString (sprintf (...));

Je to taková katastrofa? :-)
gaminn
Profil *
To mě taky napadlo, ale přeci jen ... $obj->sprintf(); je kratší a přehlednější... o trochu;)
thingwath
Profil
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
func_get_args() spolu s call_user_func_array() je to co hledáš:
function x($string) { 

$args = func_get_args();
return call_user_func_array('y', $args);
}
gaminn
Profil *
Spasitel!!!
thingwath
Profil
Pascalismus.
Toto téma je uzamčeno. Odpověď nelze zaslat.