Pozivanje f-je u zavisnosti od stringa

Pozivanje f-je u zavisnosti od stringa

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3763
  • Gde živiš: 127.0.0.1

Imam sledeci problem: u promenljivoj $pozovi imam neki string, i hocu da na osnovu sadrzaja te promenljive pozovem istoimenu f-ju - tj. ako je:

$pozovi = "nesto";

da se pokrene f-ja Nesto();

Znam da bi to moglo da se uradi preko switch-a, ali mi to resenje ne odgovara u potpunosti: jer mi treba pozivanje bilo koje f-je, bez prethodnog definisanja - tj sta god da se nadje u toj promenljivoj, da pozove f-ju sa tim imenom.

Moze li ovo da se uradi?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Imas call_user_func i call_user_func_array [ ako hoces da proslijedis argumente kao prvi, drugi, ...]

<?php function increment(&$var) {     $var++; } $a = 0; call_user_func('increment', $a); echo $a; // 0 call_user_func_array('increment', array(&$a)); // You can use this instead echo $a; // 1 ?>



offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3763
  • Gde živiš: 127.0.0.1

To care, svaka ti dala Smile

hocu da razdvojim sistemske f-je od f-ja koje su specificne za svaki skin, i ovo mi je leglo k'o kec na desetku Smile

Sad imam drugo pitanje, ali je na istu temu: sistemskih f-ja ima relativno malo (<10), pa razmisljam da li da stavim pozivanje u switch, gde za svaku sistemsku f-ju postoji case, a da default bude call_user_func, ili postoji i elegantnije resenje?

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Za prvo pitanje s pocetka teme, zar ne bi mogao stvari da resis uz pomoc eval()?

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

@Rastafarii
Kad vec odvajas neke funkcije, sto ne napravis neke klase, imam osjecaj da ce ti tako biti organizovanije.

@bobby
Mislim da je eval dosta sporiji od gore navedene funkcije, a eval opcenito treba sto vise izbjegavati.

offline
  • Pridružio: 11 Maj 2005
  • Poruke: 871
  • Gde živiš: Aleksinac - Niš

@igor86
Ta sporost ne bi uticala u ovom slucaju jer se radi o pozivu samo jedne funkcije. A da li je eval sporiji zavisi i od toga kako/gde/za sta se koristi.

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

@stankovic
Sporost ne bi uticala? Ok, ja govorim sta je vecini slucajeva brze i funkcionalnije.

Zamisli da kroz eval moras da kao argument proslijedis neki niz ili object?

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3763
  • Gde živiš: 127.0.0.1

Pa u pravu je stankovic... brzina ne igra neku ulogu, jer ce na taj nacin da se poziva max. 2-3 f-je po strani. Sa druge strane, f-jama ne prosledjujem nijedan parametar Smile

U svakom slucaju, call_user_func mi zavrsava posao (i vise od toga) Smile ukoliko neko ima bolje resenje, rado cu ga saslusati.

Drugo pitanje ostaje otvoreno Smile

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Evo ga, ima bolje, ubija brzinom i funkcionalnoscu Wink

$pozovi = "nesto"; $pozovi();

Ko je trenutno na forumu
 

Ukupno su 8596 korisnika na forumu :: 52 registrovanih, 6 sakrivenih i 8538 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: amaterSRB, Asparagus, Banovo Brdo, blankspace, bpvl, Bubimir, Colt D, Despot Đurađ, dmitarche, Dovla 1980, EVIDENTICAR, FOX, Hyde, Ivoo, Kaplar2, Koplje, laurusri, Leonov, LUDI, luka1978, Makarid, mercedesamg, milanpb, milenko crazy north, Milometer, Milos ZA, Miškić, Mićko, mux, Niki2024, Nmr, nobutado, Orc, Paklenica, Pauljxxx, RajkoB, S-lash, Sass Drake, Sevatar, Singidunumac, Sir Budimir, sosko, Srki98, sspp, vathra, Vlada1389, Vojkan Petrovic, vukdra, wizzardone, zixmix, Zoca, Zrcalo