Autor Zpráva
Seki
Profil
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
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
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
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
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
    //.....
    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
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
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
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
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 :)

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: