Kako se vrijednost dodjeljuje konstanti u PHP-u. Standardne PHP konstante. Provjera postojanja konstante

27.10.2019 Recenzije

U ovom postu ćemo otkriti u čemu je razlika PHP oglas konstante pomoću ključne riječi const i funkcije define().

Konstante u PHP-u su “konstante” čije su vrijednosti navedene samo jednom i nakon toga se ne mogu mijenjati. Ako pokušate promijeniti vrijednost, ona se neće promijeniti i pojavit će se PHP bilješka: “Konstanta je već definirana”:

Definiraj ("FOO", "val"); definiraj("FOO", "val2"); // Napomena: Konstanta već definirana echo FOO; //> val

Postoje dva načina za deklariranje konstanti u PHP-u:

// 1 definiraj("IME", "VRIJEDNOST"); // 2 const NAME = "VRIJEDNOST";

Svaka metoda ima svoje karakteristike, da bismo ih razumjeli, pogledajmo sve korak po korak, kako i što se promijenilo sa svakom verzijom PHP-a.

Kako stvoriti konstante

PHP manji od 5.3

Prije 5.3 u PHP-u, konstante su se mogle definirati samo pomoću define(). Ključna riječ const pojavila se u verziji 5.3.

Samo skalari mogu pohranjivati ​​konstante. Skalarne varijable su varijable s tipovima integer, float, string i boolean. Tipovi polja, objekta i resursa nisu skalarni.

// skalari define("FOO", 10); definiraj("FOO", 10.9); definiraj("FOO", "val"); definiraj("FOO", istina); // ne skalari define("FOO", array(1)); // konstanta nije postavljena i dobivamo Upozorenje define("FOO", (object) array(1)); // konstanta nije postavljena i dobivamo Upozorenje

Od PHP 5.3

Pojavio se ključna riječ const i sada se pomoću njega može definirati i konstanta.

Međutim, ne možete navesti varijablu, funkciju ili neku vrstu izraza u const, ali morate proslijediti skalar "izravno":

Const FOO = "val"; // nema grešaka const FOO = $var; // Pogreška analize const FOO = home_url(); // Pogreška raščlanjivanja const FOO = 5 + 10; // Pogreška analize const FOO = "foo"."bar"; // Pogreška analize

Dok za define() nema takvih ograničenja...

Definiraj ("FOO", "val"); // nema grešaka define("FOO", $var); // nema grešaka define("FOO", home_url()); // nema grešaka define("FOO", 5 + 10); // nema grešaka define("FOO", "foo"."bar"); // nema grešaka

PHP 5.6

Postalo je moguće navesti primitivne vrijednosti u konstantnim vrijednostima PHP izrazi(izrazi iz skalara):

Konst FOO = 1 + 2; const FOO = "foo" . "bar";

Postalo je moguće pohranjivati ​​nizove u konstantama:

Const FOO = ; // works define("FOO", ); // ne radi u PHP 5.6, radi u PHP 7.0

Razlika između define() i const

#1 const mora biti deklariran u gornjem opsegu

Za razliku od define(), const se mora deklarirati na samom vrhu opsega jer se definiraju kada se skripta kompajlira. To znači da se ne mogu deklarirati unutar naredbi funkcija/petlji/if ili blokova try/catch.

If (1) ( const NAME = "VALUE"; // ne radi ) // ali if (1) (define("NAME", "VALUE"); // radi )

#2 const uvijek razlikuje velika i mala slova

const uvijek razlikuje velika i mala slova, dok vam define() omogućuje da napravite konstante koje nisu osjetljive na velika i mala slova:

Definiraj("IME", "VRIJEDNOST", istina); echo IME; // VRIJEDNOST echo name; // VRIJEDNOST

#3 const razumije samo skalare

Ovo vrijedi samo za PHP verzije 5.6 i niže...

const se ne može proslijediti varijablama, funkcijama, izrazima, ali define() može biti:

Const FOO = $var; // Pogreška analize const FOO = home_url(); // Pogreška analize define("FOO", $var); // nema grešaka define("FOO", home_url()); // nema grešaka

#4 const može pohranjivati ​​nizove od PHP 5.6 i definirati od PHP 7.0

const FOO = ; // radi u PHP 5.6 define("FOO", ); // ne radi u PHP 5.6, radi u PHP 7.0
Rezultati usporedbe

Gotovo je uvijek bolje definirati konstantu pomoću define() , jer postoji više mogućnosti i manje opcija za "hvatanje" greške... Iznimka je kada imate PHP verzija 5.6 i trebate spremiti niz kao konstantu, const će vam pomoći ovdje.

PHP konstante klase

Deklariraju se samo korištenjem const. Pravila za njih su gore opisana: prihvaćaju samo skalare, ne razumiju PHP varijable, funkcije, izrazi...

Konstante klase uvijek su javne - nema privatnog ili zaštićenog statusa.

Deklarirana konstanta pripada konkretno klasi, ne pripada nijednom objektu i zajednička je svim objektima (instancama) klase.

Klasa My_Class ( const NAME = "VALUE"; // počevši od PHP-a 5.6 možete koristiti matematičke izraze const SEC_PER_DAY = 60 * 60 * 24; funkcija print_name() ( // pristup konstanti klase unutar metode putem self (sama klasa) ) echo self ::NAME; ) ) // pristup konstanti izvan klase // može se pozvati iz globalnog opsega bez inicijalizacije instance klase echo My_Class::NAME;

Konstante klase vrlo su slične svojstvima statičke klase.

Klasa My_Class ( const NAME = "VALUE"; static $name = "VALUE";; ) echo My_Class::NAME; echo Moja_klasa::$ime;

"Magične" konstante

I na kraju, prisjetimo se posebnih PHP konstanti...

PHP ima devet čarobnih konstanti koje mijenjaju svoje značenje ovisno o kontekstu u kojem se koriste. Na primjer, vrijednost __LINE__ ovisi o retku u skripti u kojem je navedena konstanta. Sve "čarobne" konstante se rješavaju tijekom kompajliranja, za razliku od regularnih konstanti, koje se rješavaju tijekom izvođenja. Posebne konstante ne razlikuju velika i mala slova i navedene su u nastavku:

Konstantno Opis
__CRTA__ Trenutačni broj retka u datoteci.
__DATOTEKA__ Puni put i naziv trenutne datoteke u kojoj se poziva konstanta.
__DIR__ PHP 5.3.0. Direktorij datoteke u kojoj se koristi konstanta. Isto kao dirname(__FILE__) . Nema kose crte na kraju, osim u korijenskom direktoriju.
__FUNKCIJA__ Naziv funkcije.
__RAZRED__ Naziv klase. Ovo ime sadrži ime imenskog prostora u kojem je klasa deklarirana (na primjer, Foo\Bar). Djeluje i na osobine. Kada se koristi u metodama značajki, ovo je naziv klase u kojoj se te metode koriste.
__OSOBINA__ PHP 5.4.0. Ime osobine. Ovo ime sadrži ime prostora imena u kojem je obilježje deklarirano (na primjer, Foo\Bar).
__METOD__ Naziv metode klase.
__NAMESPACE__ PHP 5.3.0. Naziv trenutnog imenskog prostora.
Ime klase:: klasa PHP 5.5.0. Puni naziv klase (uključujući prostor imena). Također pogledajte::class.

Provjera postojanja konstanti

Konstante u PHP-u

Konstanta je imenovana vrijednost koja se ne mijenja tijekom izvođenja programa.

Za razliku od varijable, ne možete promijeniti vrijednost konstante koja joj je dodijeljena kada je deklarirana. Konstante su korisne za pohranjivanje vrijednosti koje se ne bi trebale mijenjati dok program radi. Konstante mogu sadržavati samo skalarne podatke (booleov, cijeli broj, float i niz).

U PHP-u, konstante su definirane funkcijom definirati() . Ova funkcija ima sljedeći format:

definirati ($ime, $vrijednost, $case_sen), Gdje:

$ime- naziv konstante;
$vrijednost- vrijednost konstante;
$case_sen- izborni parametar logičkog tipa,
označavajući trebaju li slova biti osjetljiva na velika i mala slova (true) ili ne (false).

Primjer definiranja i korištenja konstanti u PHP-u:

definiraj("pi",3.14,true);
odjek pi;
// Izlazi 3.14
?>

Ako je parametar $case_sen jednaki pravi, tada će tumač uzeti u obzir velika i mala slova kod rada s konstantom. Imajte na umu da se konstante koriste bez predznaka $ .

Razlike između konstanti i varijabli:

· Konstante nemaju prefiks znaka dolara ( $ );

Konstante se mogu definirati samo pomoću funkcije definirati(), ne dodjeljivanjem vrijednosti;

· Konstante se mogu definirati i pristupiti im bilo gdje bez obzira na opseg;

· Konstante se ne mogu definirati ili poništiti nakon njihove početne deklaracije; I

· Konstante mogu imati samo skalarne vrijednosti.

Da biste provjerili postojanje konstante, možete koristiti funkciju definirano() . Ova funkcija vraća pravi, ako je konstanta deklarirana. Evo primjera:

// Deklarirajte konstantu pi
definiraj("pi",3.14,true);
if (defined("pi")==true) echo "Konstanta pi je deklarirana!";
// Skripta će ispisati "Konstanta pi deklarirana!"
?>

U PHP-u postoje sljedeće unaprijed definirane konstante:

PHP nudi veliki popis unaprijed definiranih konstanti za svaku skriptu koju pokrenete. Mnoge od ovih konstanti definirane su različitim modulima i bit će prisutne samo ako su ti moduli dostupni kroz dinamičko učitavanje ili kroz statički sklop.

Postoji pet unaprijed definiranih konstanti koje mijenjaju svoje značenje ovisno o kontekstu u kojem se koriste. Na primjer, konstanta __CRTA__ ovisi o liniji u skripti na kojoj je navedena konstanta. Posebne konstante ne razlikuju velika i mala slova i navedene su u nastavku.

U ovoj bilješci govorit ćemo o konstantama. Kao i obično, pogledajmo sam koncept konstanti u programskim jezicima i kako se one deklariraju i koriste konstante u PHP-u.

Koncept konstante i konstante u PHP-u

Riječ konstanta trebala bi vam već biti poznata iz matematike:

“Matematička konstanta- veličina čija se vrijednost ne mijenja.”

Isto je i u PHP-u. Konstanta u PHP-u je identifikator koji služi za označavanje jednostavne vrijednosti (string, neki broj) koja se ne može mijenjati tijekom izvođenja koda.

Da biste deklarirali konstantu (dodijelili joj vrijednost), koristite funkciju definirati. Primjer konstantne deklaracije:

Imena konstanti u PHP-u su osjetljiva na velika i mala slova (velika i mala slova su različita), pa morate biti oprezni. Također postoji konvencija da se imena konstanti uvijek pišu velikim slovima.

Naziv konstante mora započeti slovom ili podvlakom "_" i može se sastojati od slova, brojeva i podvlaka.

Pogledajmo jednostavan primjer korištenja konstante:

U ovom smo primjeru deklarirali konstantu i upotrijebili je u programu.

Čemu služe konstante i nije li lakše koristiti varijable?

Kao što je već spomenuto, konstante ne mogu mijenjati svoje vrijednosti tijekom izvođenja programa. Konstante obično pohranjuju stalne parametre stranice, kao što su pojedinosti o pristupu bazi podataka (host, korisnička prijava i lozinka, naziv baze podataka), lokacija stranice na disku i mnoge druge postavke.

Ako koristimo varijable, skripta može slučajno (u slučaju pogreške) promijeniti vrijednost varijable i neće raditi kako ste namjeravali.

Korištenje konstanti osigurava da vrijednost koju navedete prilikom deklaracije konstante ostane nepromijenjena.

Dobar dan svima. Alexey Gulynin je u kontaktu. U prošlom članku koji smo pogledali operator ekvivalencije u PHP-u. U ovom članku bih želio govoriti o konstante u PHP-u. U školi ste često nailazili na konstante, na primjer, "PI broj" ili iz fizike univerzalnu plinsku konstantu (R). Konstante se definiraju jednom i više se ne mijenjaju. Isto vrijedi i za konstante u programiranju, tj. konstantu definiramo jednom i ona se nikada ne mijenja u programskom kodu. Konstante mogu biti razne matematičke vrijednosti, staze do datoteka.

Kako se konstanta razlikuje od varijable:

1) Definira se jednom i ne može mu se dodijeliti vrijednost nigdje drugdje,
2) Da biste se pozvali na njega, ne morate staviti znak “$” ispred njega (ovdje postoji minus - sada ne možemo koristiti naziv konstante u tekstualnom nizu).
Ispišimo konstantu "PI":

Postoje dvije vrste konstanti: definiran od strane tumača i definiran od strane korisnika:

Primjeri konstanti definiranih od strane tumača:

1) __FILE__ - pohranjuje naziv datoteke koja sadrži kod koji se trenutno izvršava,
2) PHP_VERSION - verzija PHP interpretera,
3) PHP_OS - verzija operacijski sustav, pod kojim radi PHP.

Upišite sljedeći kod i pogledajte koje druge konstante postoje:

Možete definirati vlastite konstante, to se radi pomoću operatora definiranja. Definirajmo 2 konstante:

"; echo Const2; ?>

U ovom slučaju prikazat ćemo vrijednosti ovih konstanti.

Prema zadanim postavkama, ime konstante razlikuje velika i mala slova; može se onemogućiti korištenjem neobaveznog trećeg parametra, ovako:

"; echo neW1; ?>

Vidjet ćete da sve radi (u prethodnom primjeru neće raditi, jer je osjetljivo na velika i mala slova).

Obratite pozornost na navodnike u kojima je napisano ime konstante. Ovo morate učiniti. Također, ne možete kreirati konstante s istim imenima.

U PHP-u možete provjeriti postoji li konstanta ili ne pomoću funkcije definirano (konstantno ime). Pogledajmo primjer da bude jasnije:

Upišite ovaj primjer i pogledajte što će se dogoditi.


Varijabla je entitet koji sadrži podatke. Ako je tip podataka Opći opis format pohranjenih podataka i načini rada s njima, tada varijabla predstavlja određeni blok memorije računala. Ovaj blok pohranjuje varijabilna vrijednost, a bloku (i vrijednosti) možete pristupiti pomoću naziv varijable.


U PHP-u ime varijable uvijek počinje znakom dolara ($), nakon kojeg mora slijediti slovo, nakon čega možete koristiti slova, brojke i podvlaku. Imena su osjetljiva na velika i mala slova, tj. varijable $value, $Value, $VALUE i $VaLuE četiri su RAZLIČITE varijable, iako im naziv glasi isto.

Primjeri sintaktički ispravnih naziva varijabli:

Primjer netočnih imena:

Ima jedna stvar opće pravilo(za sve programske jezike) u vezi imenovanja varijabli. Pravilo je vrlo jednostavno: imena uvijek trebaju biti smislena.

Primjer loše čitljivog koda

Kratkoća je, naravno, bit talenta, ali žrtvovanje lakoće percepcije koda radi njegove kompaktnosti nije mudro. Štoviše, duljina imena ni na koji način ne utječe na performanse skripte. Ali ne biste trebali ići u suprotnu krajnost - dati previše varijabli duga imena. Ako se ime mora sastojati od dvije ili više riječi, dijelovi imena moraju biti označeni velikim slovima ili odvojene podvlakom. Na primjer, ime $strusernameanddomain puno bolje percipiraju u obliku $str_KorisničkoImeIDomena.

Primjer vrlo čitljivog koda

Postoje dvije vrste varijabli: regularne varijable(vrijednosne varijable) i referentne varijable. Ključna razlika između njih je način na koji obrađuju podatke. Prilikom dodjele vrijednosti regularnoj varijabli, dodijeljena vrijednost se u potpunosti kopira, tj. se stvara novi blok memorija gdje se nalazi kopija izvorne vrijednosti. Na daljnji rad sve promjene će se odraziti na ovu kopiju, a ne na izvorne podatke.

Referentne varijable rade drugačije. Kada se referentnoj varijabli dodjeljuje vrijednost, ne kopiraju se podaci, već informacije o tome gdje se nalaze. Rezultat je da varijabla pokazuje na isti blok u kojem se nalaze izvorni podaci. Sada, ako promijenite vrijednost referentne varijable, izvorna vrijednost će se promijeniti.

Pogledajmo primjer:

Prijenos varijabli po vrijednosti

U PHP-u postoje posebne funkcije za rad s varijablama:

  • isset() - provjerava da li je varijabla deklarirana i da li se njena vrijednost razlikuje od NULL;
  • empty() - analog isset()
  • unset() je ugrađena jezična funkcija koja uklanja vrijednost varijable i samu varijablu s popisa dostupnih varijabli (uništavajući varijablu).

Opseg varijable

Vrlo važna karakteristika varijabla - njen opseg (opseg), tj. opis gdje se u programu (skripti) njegova vrijednost može pročitati ili promijeniti. Uvijek trebate imati na umu da je varijabla deklarirana unutar programskog bloka vidljiva samo unutar tog bloka, a da biste pristupili varijabli deklariranoj izvan bloka, ona mora biti deklarirana na poseban način.

Programski blokovi u ovom slučaju su "skripta", "funkcija" ili "klasa". Na primjer:

Čini se da je sve točno, ali ne funkcionira. Zašto? Jer osim ako izričito ne kažete da je varijabla $name unutar funkcije zapravo globalna varijabla $name, tada će tumač stvoriti privremenu kopiju varijable pod nazivom $name i prazna vrijednost. A budući da je vrijednost prazna (nedefinirana), rezultat dodavanja nizova bit će nedefiniran (prazan).

Ispravljanje situacije je vrlo jednostavno, samo dodajte jedan red (podebljano):

globalno $name; // eksplicitno naznačiti da bismo trebali // koristiti globalnu varijablu.$puno ime = $ime. $obitelj; echo "Ime unutar funkcije: ".$fullName; ) echo "Ime PRIJE poziva funkcije: ".$name; // rezultat: "Ime PRIJE pozivanja funkcije: Vasya" tryChengeName("Ivanov"); // rezultat: "Ime unutar funkcije: Vasya Ivanov" echo "Ime NAKON poziva funkcije: ".$name; // rezultat: "Ime NAKON poziva funkcije: Vasya Ivanov" ?>

U u ovom primjeru varijabla $name ima opseg jednak cijeloj skripti, a varijabla $fullName deklarirana unutar funkcije ima opseg jednak samoj funkciji. To znači da će, kada njihova funkcija izađe, varijabla $fullName biti uništena, a svi pokušaji čitanja njezine vrijednosti rezultirat će pogreškom.

Pogledat ćemo primjere rada s klasama u odjeljku “Klase i nasljeđivanje”.

Varijabilne varijable

Da, da, ovdje nema greške, upravo se tako (u dvije riječi) zovu neke varijable u PHP-u. Ideja je da tekstualni dio imena varijable (tj. ime bez znaka dolara) može i sam biti ime. Na primjer:

Strogo se preporuča ne koristiti takve tehnike osim ako to nije apsolutno neophodno. Kod natrpan takvim trikovima vrlo je teško održavati. Ovo je osobito važno kada se radi s podacima koje unose korisnici. Glavni uzrok složenosti su implicitne ovisnosti. Na primjer, što se događa ako umjesto imena "Vasya" napišete nešto poput """""_;%//^q""? Pravo! U većini slučajeva skripta se neće moći izvršiti! Možete, naravno, dodati hrpu provjera prisutnosti "pogrešnih" znakova, ali lakše je uopće ne koristiti takve trikove.

Konstante

Konstanta je određena nepromjenjiva vrijednost. Konstanta se deklarira s imenom i vrijednošću. Da biste deklarirali konstantu, upotrijebite funkciju definirati(), te utvrditi prisutnost konstante (tj. je li definirana ili ne) - funkcije definirano(). Ime konstante konstruira se prema istim pravilima kao i imena varijabli.

Primjeri konstanti:

Zasebna vrsta PHP konstanti su takozvane "magične konstante". To su sistemske konstante čiju vrijednost određuje i postavlja interpreter. Postoji nekoliko takvih konstanti:

  • __LINE__ Sadrži broj trenutna linija u trenutnoj datoteci.
  • __FILE__ Sadrži puni naziv trenutne datoteke
  • __FUNCTION__ Sadrži naziv trenutne funkcije.
  • __CLASS__ Sadrži naziv trenutne klase.
  • __METHOD__ Sadrži naziv trenutne metode trenutne klase.

Ove su konstante vrlo prikladne za otklanjanje pogrešaka, ali u svim ostalim slučajevima bolje je ne koristiti ih, zamjenjujući ih pozivima odgovarajućih funkcija.