Constante în PHP. Întrebări frecvente (Întrebări frecvente): Lucruri pe care trebuie să le cunoașteți despre spațiile de nume care creează constantă PHP

Există cazuri în care variabilele sunt destul de incomode pentru a utiliza orice valori specifice pentru stocarea constantă care nu se schimbă în timpul programului. Aceste valori pot fi constante matematice, căi către fișiere, o varietate de parole etc. Doar în aceste scopuri în PHP există un astfel de design ca.

numit o valoare numită care nu se schimbă în timpul executării programului (script).

În constantele RNR sunt determinate de funcția defini () . Această caracteristică are următorul format:

defini ($ Nume., $ valoare, $ Caz_sen.), Unde:

$ Nume. - numele constantei;
$ valoare - constantă de valoare;
$ Caz_sen. - parametrul opțional al tipului logic,
Indicând dacă ar trebui luată în considerare cazul literelor (adevărat) sau nu (fals).

Un exemplu de determinare și utilizare a constantelor PHP:


echo pi;
// Afișează 3.14.
?>

Dacă parametrul $ Caz_sen. Corb adevărat.Interpretul va lua în considerare registrul de simbol atunci când lucrați cu constanta. Vă rugăm să rețineți că constante sunt utilizate fără un semn precedent. $ .

Diferențele dintre constante și variabile:

    Constant nici o consolă sub forma unui semn de dolar ( $ );

    Constantele pot fi definite doar folosind funcția defini () și nu alocarea valorii;

    Constantele pot fi definite și disponibile oriunde fără a lua în considerare domeniul de aplicare;

    Constantele nu pot fi determinate sau anulate după anunțul inițial;

    Constantele pot avea decât valori scalare.

Verificarea existenței constantelor

Pentru a verifica existența constantă, puteți utiliza funcția definit () . Această caracteristică se întoarce adevărat.dacă este declarată constanta. Să dăm un exemplu:

// declară o constantă
defini ("pi", 3.14, adevărat);
dacă (definit ("pi") \u003d\u003d adevărat) ecou "Constant este anunțat!";
// Scriptul va afișa "PI Constant este anunțat!"
?>

Constantele PHP predefinite

Există următoarele constante predefinite în PHP:

PHP oferă o listă mare de constante predefinite pentru fiecare script executabil. Multe dintre aceste constante sunt determinate de diferite module și vor fi prezente numai dacă aceste module sunt disponibile ca urmare a unei sarcini dinamice sau ca rezultat al ansamblului static.

Există cinci constante predefinite care își schimbă valoarea în funcție de contextul în care sunt utilizate. De exemplu, Constanța __Linia__ Depinde de rândul din scriptul pe care este indicat această constatare. Constantele speciale sunt insensibile la registru, iar lista lor este prezentată mai jos:

Nume Descriere
__Linia__ Linia curentă în fișier.
__Fişier__ Calea completă și numele fișierului curent.
__Dir__ Directorul fișierului. Dacă este utilizat în interiorul unei includeri, directorul fișierului inclus este returnat. Acest lucru este echivalent cu DIRNAME (__ File__). Numele acestui director nu are o tradiție slash decât dacă este directorul rădăcină.
__Funcţie__ Numele funcției. (Adăugat la PHP 4.3.0.)
__Clasă__ Numele clasei. (Adăugat la PHP 4.3.0.)
__Trăsătură__ Numele trăsăturii. Numele TAIT include spațiul de nume A fost declarat în (de exemplu, foo \\ bar).
__Metodă__ Numele metodei de clasă. (Adăugat la PHP 5.0.0)
__Namespace__ Numele spațiului de nume curent.

În plus

Constant este un identificator (nume) pentru o valoare simplă. După cum rezultă din nume, valoarea lor nu se poate schimba în timpul executării scenariului (cu excepția constantelor magice, care nu sunt de fapt constante). Constantele implicite sunt sensibile la registru. În conformitate cu acordul adoptat, numele constantelor sunt întotdeauna scrise în majuscule.

Numele constantei trebuie să respecte aceleași reguli de numire ca și alte nume în PHP. Numele corect începe cu litera sau subliniind simbolul, urmat de orice număr de litere, numere și caractere subliniere. Expresie uzuala Pentru a verifica corectitudinea numelui constantei arată astfel: ^ * $

Este posibil să se determine constantele folosind funcția defini () Numele rezervate sau chiar incorecte ale căror valori pot fi (numai) sunt obținute prin funcție constant (). Cu toate acestea, nu este recomandat.

Exemplu # 1 Numele constante corecte și incorecte

// nume dreapta constante
definiți ("foo", "ceva");
definiți ("foo2", "altceva");
definiți ("foo_bar", "ceva mai mult");

// nume constante incorecte
definiți ("2foo", "ceva");

// Acesta este un anunț fidel, dar este mai bine să nu o utilizați:
// php o dată poate înregistra o constantă magică,
// care încalcă lucrarea scenariului
definiți ("__foo__", "ceva");

?>

cometariu: Conceptul de "scrisori" aici este simboluri A-Z, A-Z și alte caractere cu coduri ASCII de la 128 la 255 (0x80-0xff).

acum 2 ani.

Performanța constantelor. PHP 7.1.10 32 biți (Opcache Active, Windows 10 i7-64bits) Dar aparent tendințele sunt la fel cu 5.x

folosind o constantă declarată prin definirea ("CNS", valoare): 0.63575601577759s
folosind o constantă declarată de Const CNS \u003d valoare: 0.61372208595276s
folosind o variabilă declarată de $ V \u003d valoare: 0.51184010505676s

În medie, utilizarea definexului și a contului este în jurul valorii de același cu o performanță mai bună mai bună a contului în loc de definire. Cu toate acestea, utilizarea unei variabile este de aproximativ 10-50% mai bună decât utilizarea unei constante. Deci, pentru o sarcină intensă de performanță, constant nu este cea mai bună opțiune.

$ p1 \u003d microtime (adevărat);
$ x \u003d 0;
pentru ($ i \u003d 0; $ i<50000000;$i++) {
$ x + \u003d cns;
}
$ P2 \u003d microtime (adevărat);

Acum 14 ani.

O constantă nedefinită evaluează ca fiind adevărată atunci când nu este utilizată corect. Spuneți, de exemplu, ați avut ceva de genul acesta:

setări.php.
// Modul de depanare.
definiți ("Debug", Fals);
?>

test.php.
includ ("setări.php");

dacă (Debug) (
// ecou unele date sensibile.
}
?>

Dacă, din anumite motive, setările nu este inclusă și nu este setată constanta de depanare, PHP va imprima în continuare datele sensibile. Soluția este de ao evalua. Ca și așa:

setări.php.
// Modul de depanare.
definiți ("Debug", 0);
?>

test.php.
includ ("setări.php");

dacă (Debug \u003d\u003d 1) (
// ecou unele date sensibile.
}
?>

Acum funcționează corect.

Ultima actualizare: 1.11.2015

Constantele, precum și magazinul de variabile valoare specifică, doar spre deosebire de variabile înseamnă Constant poate fi instalat o singură dată, iar apoi nu mai putem schimba. De exemplu, definim o constantă numerică:

Pentru a determina constanta, se utilizează operatorul de definire, care are formularul de mai jos: Definiți (String $ Nume, string $ valoare, bool $ cazs_sen \u003d false). Parametrul Nume transmite numele constanta, iar parametrul de valoare $ este valoarea sa. Al treilea parametru opțional ia valoarea logică Adevărat sau fals. Dacă valoarea este falsă, atunci când utilizați constanta va fi luată în considerare registrul său, dacă este adevărat - registrul nu este luat în considerare. În cazul nostru, al treilea parametru nu este utilizat, deci este egal cu falsul în mod implicit.

După determinarea constantă, îl putem folosi, precum și variabila obișnuită. Singura excepție - nu vom putea să-i schimbăm sensul. O altă diferență față de variabilă nu este de a folosi semnul $. Adică numărul de expresie este numărul \u003d 33; Nu va merge.

Constantari predefinite

În plus față de programatorul creat de programator, există mai multe constante mai încorporate în PHP:

    File__: stochează calea și numele complet al fișierului curent

    LINE__: stochează numărul de linie curent la procesele de interpretare

    Dir__: stochează directorul de fișiere curent

    Funcție__: Numele funcției prelucrate

    CLASS__: Numele clasei curente

    Metoda: Numele metodei procesate

    NameSpace__: Numele spațiului de nume curent

De exemplu, retrageți șirul executiv curent și numele fișierului:

Verificarea existenței Constanța

Pentru a verifica dacă constante sunt definite, putem folosi funcția BOOL definită (String $ Name). Dacă este definită o constantă de nume, funcția se va întoarce la TRUE

Constantele - Acestea sunt valori care nu se schimbă în timp. De la școală, probabil știți multe constante, de exemplu, numărul p., Număr e., accelerarea căderii libere și a altor persoane. Și, desigur, atunci când programați, de asemenea, foarte des nevoia de intrare constant. Și despre cum creați și utilizați Constante PHP, Vom vorbi în acest articol.

Haideți cu tine creați o constatare Numere p.:

Defini (PI, 3.1415926);
Echo pi;
?>

Operator defini Creează constanța Pi. și atribuie semnificația 3.1415926 . Apoi aducem această constantă prin operator ecou.. Totul este foarte simplu, totuși, există o recomandare pe care vă sfătuiesc să urmați întotdeauna. Asigurați-vă că scrieți constantele litere mari. Nu că era neapărat, dar extrem de de dorit. Și așa acceptat nu numai în PHP., dar și în alte limbi.

Desigur, după aceea schimbați constanta Pi nu va fi (despre asta constant).

Acum vom analiza o singură funcție care verifică: " Este o dată definită dată"Să scriem un astfel de script:

dacă (! definit ("pi") definește (PI, 3.1415926);
Echo pi;
?>

Aici existența constantă este verificată Pi.. Și dacă nu există (adică definiți () funcția Vernoil. fals), apoi inițializați această constantă. Apoi retrageți-o.

După cum puteți vedea, crea și utiliza dvs. constante în PHP. - E foarte simplu.

Și, în cele din urmă, vreau să spun built-in Constante PHP. Să scriem un script simplu cu dvs.:

phpinfo ();
?>

Mai aproape de capăt există o secțiune " Variabilă php."De fapt, acest lucru nu este destul constantele, totuși, ei sunt constanța Când efectuați acest script. Desigur, atunci când efectuați un alt script, ei vor avea deja alte valori (nu totul, desigur). Să aducem un cuplu cu tine constantastfel încât să înțelegeți cum să lucrați cu ei, deoarece acestea sunt folosite de multe ori adesea:

Echo $ _Server ["Remote_Addr"];
Echo "
";
Echo $ _Server ["Query_String"];
?>

În acest scenariu derivăm Adresa IP a utilizatoruluiRularea scriptului și pe următoarea linie Spuneți șirul de interogare (de exemplu, " index.php id \u003d 7") Privind puțin înainte, spunând aici lucrăm cu globul global o matrice de $ _Server.. Încă ne întâlnim cu matrice, dar cred că cei care au lucrat cu matrice în alte limbi de programare, sintaxă recunosc fără probleme. Ca și pentru alții constant, atunci cu ei lucrează în mod similar.

Pentru fiecare script executabil. Multe dintre aceste constante sunt determinate de diferite module și vor fi prezente numai dacă aceste module sunt disponibile ca urmare a unei sarcini dinamice sau ca rezultat al ansamblului static.

Există nouă constante magice care își schimbă valoarea în funcție de contextul în care sunt utilizate. De exemplu, valoare __Linia__ Depinde de rândul din scriptul pe care este indicat această constatare. Toate constantele magice sunt permise în timpul compilării, spre deosebire de constantele convenționale care sunt permise în timpul executării. Constantele speciale sunt insensibile la registru, iar lista lor este prezentată mai jos:

Unele constante magice PHP
Nume Descriere
__Linia__ Numărul de linie curent în fișier.
__Fişier__ Calea completă și numele fișierului curent cu SIMINKS implementate. Dacă este utilizat în interiorul fișierului plug-in, atunci numele acestui fișier este returnat.
__Dir__ Director de fișiere. Dacă este utilizat în interiorul fișierului plug-in, directorul acestui fișier este returnat. Acest lucru este echivalent cu apelarea dIRNAME (__ File__). Numele de returnare al directorului nu se termină pe Lay, cu excepția directorului rădăcină.
__Funcţie__ Numele funcției Or. (Închidere) În cazul în care o funcție anonimă.
__Clasă__ Numele clasei. Acest nume conține numele spațiului de nume, în care a fost anunțată clasa (de exemplu, Foo \\ bar.). Vă rugăm să rețineți că începând cu PHP 5.4 __class__ funcționează, de asemenea, în trăsături. Când este utilizat în metodele de trăsături __class__ este numele clasei în care sunt utilizate aceste metode.
__Trăsătură__ Numele trăsăturii. Acest nume conține numele spațiului de nume, în care a fost declarată trăsătura (de exemplu, Foo \\ bar.).
__Metodă__ Numele metodei de clasă.
__Namespace__ Numele spațiului de nume curent.
ClasaName :: Clasa Nume de clasă completă (indicând spațiul de nume). Vedeți și :: Clasa.

Vezi si get_class (), get_object_vars (), fisierul exista () și funcții_exists ().

Lista modificărilor

Acum 14 ani.

Diferența dintre.
__Function__ și __method__ ca în PHP 5.0.4 este asta

Funcția__ returnează numai numele funcției

În timp ce __method__ returnează numele clasei de-a lungul numelui funcției

clasa trick.
{
Funcția Doit ()
{
ECHO __function__;
}
Funcția Doitagain ()
{
Echo __method__;
}
}
$ Obj \u003d truc nou ();
$ Obj-\u003e doit ();
ieșirea va fi ----
$ Obj-\u003e DOITAGAIN ();
ieșire va fi ----- trick :: DoitaGain

Acum 13 ani.

__Class__ Magic constantă frumos completează funcția get_class ().

Uneori trebuie să știți atât:
- Numele clasei moștenite
- numele clasei executate efectiv

Iată un exemplu care arată soluția posibilă:

Clasa base_class.
{
Funcția Say_a ()
{

" ;
}

Funcția Say_B ()
{

" ;
}

clasa derivate_class extinde base_class
{
Funcția Say_a ()
{
părinte :: Say_a ();
Echo "" A "- a spus". __Clasă__. "
" ;
}

Funcția Say_B ()
{
părinte :: Say_B ();
Echo "" B "- a spus". get_class ($ acest). "
" ;
}
}

$ Obj_b \u003d nou derivate_class ();

$ Obj_b -\u003e Say_a ();
echo "
" ;
$ Obj_b -\u003e Say_b ();

?>

Shld-ul de ieșire arată aproximativ așa:

"A" - a spus base_class
"A" - a spus derivate_class

"B" - a spus derivate_class
"B" - a spus derivate_class

Acum 3 ani.

Observați o mică inconsecvență atunci când utilizați __class__ și __method__ în trăsături (stand PHP 7.0.4): În timp ce __class__ lucrează așa cum este anunțat și returnează dinamic numele clasei este utilizată în, __method__ va preface efectiv numele trăsăturii în loc de Numele clasei!

acum 8 ani.

Nu există nici o modalitate de a implementa un __dir__ compatibil înapoi în versiuni înainte de 5.3.0.

Singurul lucru pe care îl puteți face este să efectuați o căutare recursivă și să înlocuiți la DIRNAME (__ File__):
găsi. -Type F -print0 | Xargs -0 sed -i "s / __ dir __ / dirname (__ fișier __) /"

acum 5 ani.

O mulțime de note aici se referă la definirea constantă a magicului __dir__ pentru versiunile PHP care nu susțin caracteristica. Bineînțeles că puteți defini această constantă magică pentru versiunile PHP care nu au încă această constantă, dar va învinge scopul de îndată ce sunteți o utilizare constantă într-un fișier inclus, care poate fi într-un director diferit, apoi fișierul care definește __dir__ Constant. Ca atare, constanta și-a pierdut * Magic * și ar fi destul de inutil decât dacă vă asigurați că aveți toate acestea în același director.

În concluzie: Ochelarch Catchup la gmail dot com's Notă privind dacă nu puteți defini constantele magice este valabil, dar afirmând că definirea __dir__ nu este inutilă, nu este!

cu 7 ani în urmă.

Nu puteți verifica dacă este definită o constantă magică. Aceasta înseamnă că nu există niciun punct de a verifica dacă __dir__ este definit apoi, definirea acestuia. "Definit (" __ dir __ ")` întotdeauna returnează fals. Definirea __dir__ va eșua în tăcere în php 5.3+. Acest lucru ar putea provoca probleme de compatibilitate dacă scriptul dvs. include alte scripturi.

echo (definit ("__dir__")? "__Dir__ este definit": "__dir__ nu este definit." PHP_EOL);
echo (definit ("__file__")? "__File__ este definit": "__file__ nu este definit." PHP_EOL);
eCHO (definit ("PHP_VERSION")? "PHP_VERSION este definit": "PHP_VERSION nu este definit"). Php_eol;
eCHO "Versiune PHP:". Php_version. Php_eol;
?>
Ieșire:
__Dir__ nu este definit
__File__ nu este definită
PHP_VERSION este definit.
Versiune PHP: 5.3.6