Autor Zpráva
it47
Profil
Ahojte,

chcem sa prosim spytat, preco mi Phpstorm pise stale chybu, ked mam definovanu novu konstantu priamo vo funkcii, napr.

function moja_funkcia() {
    define ('CONSTANTA_ROK', date("Y"));
    echo CONSTANTA_ROK;
}

Kod realne funguje spravne, avsak stale to mam cervene, ze tam je chyba.

Viem to prosim spravit nejako lepsie?

Vopred dakujem velmi pekne.

it47
Keeehi
Profil
it47:
On asi úplně neříká, že tam je chyba. Spíš ti ukazuje, že je tam potenciální problém. Protože když se ta funkce zavolá podruhé, PHP vyhodí výjimku (notice nebo warning, záleží na verzi php).
Takže ti to spíš ukazuje na nevhodné použití. Ono samotné používání konstant není úplně ideální, jelikož jsou globální. Takže to má stejné nevýhody jak používání globálních proměnných.
it47
Profil
Keeehi:
On asi úplně neříká, že tam je chyba. Spíš ti ukazuje, že je tam potenciální problém. Protože když se ta funkce zavolá podruhé, PHP vyhodí výjimku (notice nebo warning, záleží na verzi php).
Takže ti to spíš ukazuje na nevhodné použití. Ono samotné používání konstant není úplně ideální, jelikož jsou globální. Takže to má stejné nevýhody jak používání globálních proměnných.

Dakujem velmi pekne, vysvetlenie dava uplne zmysel a suhlasim s nim. A teda ako by to bolo prosim najlepsie vyriesit, ked potrebem konstantu len v ramci funkcie? Mam pouzit klasicke premenne? Konstanty som pouzil pre vacsiu prehladnost.

A Phpstorm mi takisto "podciarkuje" zastaraly sposob definicie konstatny cez define, a navrhuje ju vo formate: const CONSTANTA_ROK = 2021

Aky je medzi tym prosim rozdiel? Na druhej strane mi potom nejde const CONSTANTA_ROK = date("Y"), ako keby hodnota konstanty nemohla byt hodnota z funkcie.

Vopred dakujem velmi pekne.

it47
N71
Profil *
Konstrukt const zpracovává už kompiler před samotným spuštěním skriptu. Takže může obsahovat jen skalární hodnoty a nemůže být uvnitř funkcí, cyklů a podobně.
Obecně bys měl konstanty používat na místě neměnných skalárních hodnot. Například jako náhradu různých výčtových typů, číselných koeficientů, textových identifikátorů a podobně.

Jinak konstanta má globální scope, uvnitř funkce ji uvidíš. Ale kolem a dokola – raději bys měl zaměřit svou pozornost na OOP, v globálním scope se slušný programátor nepohybuje.

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