Autor Zpráva
Jan Tvrdík
Profil
Která varianta je podle vás lepší? První zkusí rovnou soubor přejmenovat a pokud náhodou dojde k chybě (což je statisticky velmi nepravděpodobné), tak ji zpětně analyzuje. Druhá verze chybě předchází, čímž ale běží téměř vždy (kromě případů kdy dojde k chybě) jedna podmínka navíc.
public function mojePrejmenovani1($oldName, $newName)
{
	if (!rename($oldName, $newName)) {
		if (!file_exists($oldName)) {
			throw new Exception('Soubor nenalezen');
		}
		throw new Exception('Neznámá chyba');
	}
}

public function mojePrejmenovani2($oldName, $newName)
{
	if (!file_exists($oldName)) {
		throw new Exception('Soubor nenalezen');
	}
	if (!rename($oldName, $newName)) {
		throw new Exception('Neznámá chyba');
	}
}

Pozn.: Vždy jsem používal variantu II, až nyní mě napadlo, že by šla použít i varianta I.
joe
Profil
Osobně bych použil taky variantu 2.
Jan Tvrdík
Profil
Nechce se k tomu vyjádřit ještě někdo? :)
Mike8748
Profil
ja bych byl pro variantu 2, ale jeste bych tam doplnil kontrolu na existenci $newName, protoze pokud $newName existuje tak se taky prejmenovani nepovede, a "Neznama chyba" neni moc informativni v tomhle smeru

nebo doplnit 3 nepoviny parametr, $force=false, pokud bude true, tak se napred $newName smaze (pokud existuje samozdrejme)
Joker
Profil
Jan Tvrdík
Řekl bych, že to je celkem jedno, obojí je "správně".

Teoreticky se dá říct to, co je asi zřejmé:
Varianta 1 je obecně výhodnější za těchhle podmínek:
- chyba v rename bude nastávat spíš výjimečně
- bude se často stávat, že selže rename, aniž by selhalo file_exists (tj. varianta "neznámá chyba")
- funkce file_exists bude náročnější, než rename

Varianta 2 je obecně výhodnější za těchhle podmínek:
- funkce file_exists není moc náročná, respektive funkce rename je hodně náročná
- k variantě "soubor nenalezen" bude docházet poměrně často a naopak k variantě "neznámá chyba" málokdy.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0