Autor Zpráva
quatzael
Profil
Co znamená když je v PHP kódu něco takového: @fputs($parameter1,$parameter2)? V dokumentaci PHP je jen fputs() bez zavináče.

Moderátor Petr ZZZ: Kvůli snazšímu dohledání tohoto zajímavého vlákna jsem doplnil do nadpisu slůvko „zavináč“.
weroro
Profil
quatzael:
Laicky povedané: Zabraňuje to vypísaniu chyby alebo je to akási výnimka, vďaka ktorej sa chyba preskočí.
Často to bolo vídať v spojitosti s funkciou mail()
quatzael
Profil
weroro:
Často to bolo vídať v spojitosti s funkciou mail()
S funkcí mail() bych si to spojoval zrovna z jinýho důvodu..

No tak teda to znamená, že je na samotnej běh to nemá žádný vliv, pokud se tam žádný chyby nevyskytují?
Že o tom není nikde zmínka v dokumentaci..
lionel messi
Profil
quatzael:
No tak teda to znamená, že je na samotnej běh to nemá žádný vliv, pokud se tam žádný chyby nevyskytují?
Používanie zavináča ako operátora na potláčanie chýb vo všeobecnosti spomaľuje beh programu, hoci nejde o dramatické zmeny.

Odporúčam prečítať si prvé komentáre v diskusii k článku Jak psát kód: Nepřežeňte to s komentáři, kde profíci riešia vhodnosť tohto riešenia a vysvetľujú, ako a prečo k zmienenému spomaleniu dochádza.
tomix
Profil
quatzael:
http://php.net/manual/en/language.operators.errorcontrol.php
snazimse
Profil
Tohle je zajímavé, v tom, že to vidím v kodu někoho dost často, přijde mi to trochu jako hloupost.

Mohl by někdo objasnit ze zkušených, jaký to má zřejmý přínos?
Je to jen to ,že nebudu mít error, že ho ignoruju a co tím docílím?To je hloupé, se mi zdá. Nějaký názorný příklad, by se hodil.
Keeehi
Profil
snazimse:
Hodí se to jen vyjímečně a to u funkcí, které nejsou dobře napsané a místo nějaké rozumné návratové hodnoty nebo vyhození výjimky raději zahlásí chybu.
Joker
Profil
weroro:
Často to bolo vídať v spojitosti s funkciou mail()
S maily se znak @ sice spojuje, ale pokud jde o potlačení chyb, mívám s mail() opačný problém: Když se mail neodeslal, snad nikdy jsem z funkce mail() nevydoloval nějaký důvod, nebo kde je problém.

snazimse:
to vidím v kodu někoho dost často, přijde mi to trochu jako hloupost.
Kód, který tohle používá často, je podezřelý.

Mohl by někdo objasnit ze zkušených, jaký to má zřejmý přínos?
Tak obecně platí: Chybové hlášky nepotlačujeme.
Někdy se ale může stát, že nějaká funkce vyhodí chybovou hlášku i pro něco, co bude nastávat běžně a počítáme s tím a zároveň je vznik nějaké jiné chyby v té funkci vysoce nepravděpodobný. Pak se může potlačení chybových hlášek hodit, ale jak píše Keeehi, je to spíš výjimečně.

Pak se to dá vidět u některých frameworků a knihoven, které v některých situacích potlačí standardní hlášku PHP a místo toho generují třeba výjimku.
snazimse
Profil
Keeehi, Joker:

Rozumím,díky za objasnění no tak pak asi jo, zajímavé.A ví někdo od jaké verze php, to funguje? Ve 3 to asi ještě neexistovalo předpokládám? Ve 4?
Davex
Profil
snazimse:
A ví někdo od jaké verze php, to funguje?
Od PHP/FI 2.0.
Jan Tvrdík
Profil
Typicky se @ používá v situacích, kdy nejde chybě zabránit, např.

if (!is_dir($path)) {
    @mkdir($path); // adresář v tuhle dobu už může existovat
    if (!is_dir($path)) {
        throw new \RuntimeException();
    }    
}
snazimse
Profil
Davex, Jan Tvrdík:

Děkuji za upřesnění! Super!
anonymníí
Profil *
Jan Tvrdík:
Ta vnitřní podmínka vyhazující chybu, ta bude nesplněna pokaždé, ne?

Respektive, pokud adresář neexistoval na prvním řádku, tak teď už existuje (buď jsem ho vytvořil teď, nebo se vytvořil jinde, proto ten zavináč). Co se musí stát, aby se nevytvořil?

Napadají mě jen chybná práva k adresáři, ale ta by se měla kontrolovat ještě před snahou adresář vytvořit. Pokud bych tedy předpokládal správná práva k adresáři, ve kterém chci vytvářet (budou ošetřena podmínkou), může být ta exceptiona někdy vyhozena? Kdy?
Jan Tvrdík
Profil
anonymníí:
Chybná práva budou rozhodně nejpravděpodobnější příčinnou, ale těch důvodů může být více, např. když bude existovat soubor se stejným názvem jako adresář, který chceš vytvořit nebo nedostatek místa na disku nebo tak něco.

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: