Autor | Zpráva | ||
---|---|---|---|
Seki Profil |
#1 · Zasláno: 9. 8. 2012, 15:31:24
Zdravím, řešíte něják problém úrovně Notice, který říká, že do proměnné byly uloženy data dříve, než byla definována. Je mi jasné, že pokud není error_reporting na E_ALL tyto chyby se nezobrazují, ale doporučuje se je něják řešit? Napadá mě definování proměnné a přiřazení null nebo podle mě lepší způsob a to použití zavináče. Co myslíte?
|
||
ShiraNai7 Profil |
#2 · Zasláno: 9. 8. 2012, 15:34:24
V žádném případě chyby nepotlačovat, už vůbec ne zavináčem. Chyby by měly být skryté jen v ostré verzi aplikace/webu, ale určitě je správné je řešit. Buď tyto proměnné předem definovat (např. s výchozími hodnotami) nebo přepsat skript tak, aby k chybě nemohlo dojít.
|
||
Seki Profil |
#3 · Zasláno: 9. 8. 2012, 15:40:47
No je z hlediska výsledné mikrooptimalizace aplikace lepší nechat proměnné nedefinované a prostě schovat úrovně chyby NOTICE (udělá se to stůj co stůj), nebo je lepší proměnné definovat s výchozými hodnotami?
|
||
ShiraNai7 Profil |
#4 · Zasláno: 9. 8. 2012, 15:48:48
Vždy je lepší proměnné předem definovat nebo, jak jsem psal, upravit skript tak, aby k chybě dojít nemohlo. Potlačovat notice může vést k bezpečnostním dírám a pozdějším těžko odhalitelným problémům (proměnná se stejným názvem se náhodou definuje dříve jiným skriptem a má pak jinou "výchozí" hodnotu).
|
||
Alphard Profil |
#5 · Zasláno: 9. 8. 2012, 15:58:52
Seki:
„který říká, že do proměnné byly uloženy data dříve, než byla definována“ To není řečeno správně. V PHP se proměnná definuje mj. přiřazením hodnoty. Uvedené notice se zobrazují naopak ve chvíli, kdy je z proměnné berete hodnotu a proměnná přitom nebyla vytvořena. Konkrétní ošetření záleží na konkrétním případě. |
||
Seki Profil |
#6 · Zasláno: 9. 8. 2012, 16:40:37
//..... while ($cas = db::assoc ($conn_time)) { $celkem += ($cas['session_end'] - $cas['session_start']); //..... } Takže před provedením cyklusu mám proměnnou $celkem definovat přiřazením nuly? |
||
Jan Tvrdík Profil |
#7 · Zasláno: 9. 8. 2012, 16:41:31
Seki:
„Takže před provedením cyklusu mám proměnnou $celkem definovat přiřazením nuly?“ Ano, to je správný postup. |
||
mimochodec Profil |
#8 · Zasláno: 9. 8. 2012, 16:48:48
Jan Tvrdík:
„Ano, to je správný postup.“ Pokud pomineš, že suma intervalů z tabulky se má počítat takhle: $suma = mysql_result(mysql_query("SELECT SUM(session_end-session_start) FROM table"),0); Ale možná ten dotaz má i nějaký jiný účel. V tomto případě tento příspěvek možno ignorowacz. |
||
Joker Profil |
#9 · Zasláno: 9. 8. 2012, 17:32:03
Seki:
„z hlediska výsledné mikrooptimalizace aplikace“ Ha, mikrooptimalizace. To je ta činnost, kdy programátor neřeší proč a jestli vůbec je program pomalý, ale rovnou si vyhlédne nějakou triviální konstrukci s nulovou výpočetní náročností a pak celé hodiny řeší, jak ji z programu vyhodit, samozřejmě bez ohledu na čitelnost a udržovatelnost? Myslím, že i z pohledu mikrooptimalizace je to v klidu, protože výpočetní doba jednoho operátoru přiřazení je nula na jakékoliv realistické úrovni přesnosti. |
||
Ugo Profil |
#10 · Zasláno: 10. 8. 2012, 07:01:55
Seki:
z hlediska optimalizace je výhodnější proměnnou definovat, práce s nedefinovanou proměnnou je velice pomalá a třeba o zmiňovaném zavináči ani nemluvě, to je vyloženě záchraná brzda když má co potlačit :) |
||
Časová prodleva: 12 let
|
0