eval() v PHP

Programovacie jazyky, rady, poradňa...
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

eval() v PHP

Príspevok od používateľa weroro »

Ahoj
zase som tu s pre Vás triviálnou otázkou. Ako funguje prosím v PHP funkcia eval()? Som zvyknutý na zápis

Kód: Vybrať všetko

var premenna2:Boolean = true;
eval("premenna"+2); 
a z toho mi vylezie premenna2. Avšak v PHP mám Boolean premenné $pos1 a $pos2, ktoré napĺňam hodnotou, ktorú mi vráti funkcia strrpos();

Kód: Vybrať všetko

//toto funguje bez problémov
$pos1 = strrpos($SPodosielatel, $userNick);
$pos2 = strrpos($SPprijimatel, $userNick);
if ($pos2 !== false) {
 echo "vystup";
}
//Toto už hádže syntax error
$pos1 = strrpos($SPodosielatel, $userNick);
$pos2 = strrpos($SPprijimatel, $userNick);
if (eval("$pos2") !== false) {
 echo "vystup";
}
//A toto tak isto
$pos1 = strrpos($SPodosielatel, $userNick);
$pos2 = strrpos($SPprijimatel, $userNick);
if (eval('$pos2') !== false) {
 echo "vystup";
}
//Chcem to pouzit napr. takto
$pos1 = strrpos($SPodosielatel, $userNick);
$pos2 = strrpos($SPprijimatel, $userNick);
$cislo = 2;
if (eval($pos$cislo) !== false) {
 echo "vystup";
} 
ako to mám prosím Vás zapísať? Ďakujem veľmi pekne.

//autoeditácia príspevku (14 Dec 2010, 05:00)
Takže som to zatiaľ vyriešil pomocou pola:

Kód: Vybrať všetko

$pos = array("null", strrpos($SPodosielatel, $userNick), strrpos($SPprijimatel, $userNick));
$cislo = 2;
if ($pos[$cislo] !== false) {
 echo "vystup";
} 
ale aj tak by som to radšej urobil pomocou eval();
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: eval() v PHP

Príspevok od používateľa audiotrack »

neviem či je eval() najšťastnejšie riešenie, pretože ak ma pamäť neklame, vracia result tej funkcie iba ak funkcia nejaký return má. Inak vráti true / false podľa toho či sa vykonala alebo nie. Keďže do evalu chceš vytvoriť premennú, nemá to žiaden návratový typ (dokonca to ani nie je funkcia), tak ti vždy vráti ten eval() true a teda tá podmienka nemá zmysel. Riešil by som to takto:

Kód: Vybrať všetko

$pos1 = strrpos($SPodosielatel, $userNick);
$pos2 = strrpos($SPprijimatel, $userNick);
$cislo = 2;
$pom = "pos" . $cislo;  //v premennej $pom mam teraz retazec pos2. Pomocou $$pom teda zavolam premennu $pos2
if ($$pom !== false) {
     echo "vystup";
}
a ešte jedna výhrada k tvojmu poľu:

Kód: Vybrať všetko

$pos = array("null", strrpos($SPodosielatel, $userNick), strrpos($SPprijimatel, $userNick));
zbytočne tam alokuješ o jeden prvok viac, keď ho nepotrebuješ a dávaš na null. Navyše null ti teraz berie ako reťazec lebo si ho dal do úvodzoviek. Keby ho nedáš do úvodzoviek, tak je to array of int namiesto array of string (nemiešaš tam dátové typy tak sa nemusí brať ten najväčší) a ušetríš kopec pamäte. Ak potrebuješ číslovať pole od iného indexu ako je 0, tak to jednoducho definuješ pre prvú hodnotu:

Kód: Vybrať všetko

$pos = array(1 => strrpos($SPodosielatel, $userNick), strrpos($SPprijimatel, $userNick));
Ušetríš si tým kopec nervov (pri testovaní či je pole prázdne, napríklad pri triedení poľa.. jednoducho je zvykom nedávať do poľa zbytočne veci ktoré potom ignoruješ)
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: eval() v PHP

Príspevok od používateľa weroro »

Ja mám preto string null na nultej pozícii, lebo to používam ako defaultnú hodnotu a ďalej ju spracúvam vo funkcii. Polia používať viem.

Kód: Vybrať všetko

$pos = array(1 => strrpos($SPodosielatel, $userNick), strrpos($SPprijimatel, $userNick));
Toto je dobrá rada a určite sa mi to raz zíde :) aj, tak som do teraz netušil, čo znamená Ďakujem
Napísať odpoveď