Magične metode i unapred definisane konstante u PHP-u. Kreiranje konstanti u PHP-u - const i define() #3 const razumije samo skalare

Dobar dan svima. Alexey Gulynin je u kontaktu. U prošlom članku koji smo pogledali operator ekvivalencije u PHP-u. U ovom članku želim govoriti o tome 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 menjaju. Isto važi i za konstante u programiranju, tj. definišemo konstantu jednom i ona se nikada ne mijenja u programskom kodu. Konstante mogu biti različite matematičke vrijednosti, putanje do datoteka.

Kako se konstanta razlikuje od varijable:

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

Postoje dvije vrste konstanti: interpretatorski definirani i korisnički definirani:

Primjeri konstanti definiranih od strane interpretatora:

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

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

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

"; echo Const2; ?>

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

Prema zadanim postavkama, naziv konstante je osjetljiv na velika i mala slova; može se onemogućiti korištenjem opcionog trećeg parametra, kao što je ovaj:

"; echo neW1; ?>

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

Obratite pažnju na navodnike u kojima je napisano ime konstante. Ovo se mora uraditi. Takođe, ne možete kreirati konstante sa istim imenima.

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

Otkucajte ovaj primjer i pogledajte šta će se dogoditi.

(PHP 5 >= 5.3.0, PHP 7)

Ova lista pitanja podijeljena je na dva dijela: opća pitanja i neke specifičnosti implementacije koje su korisne za potpunije razumijevanje.

Prvo, opšta pitanja.

  1. Ako ne koristim prostore imena, treba li išta od ovoga smatrati važnim?
  2. Kako da koristim unutrašnje ili globalne klase u imenskom prostoru?
  3. Kako da koristim funkcije klase u imenskim prostorima ili konstante u njihovom vlastitom imenskom prostoru?
  4. Kako je takvo ime \moje ime ili \name konvertovan?
  5. Kao ime moje ime konvertovan?
  6. Poput nekvalifikovanog naziva klase kao što je ime konvertovan?
  7. Poput nekvalificiranog imena funkcije ili nekvalificiranog imena konstante kao što je ime konvertovan?

Neki detalji implementacije imenskog prostora koji su korisni za razumijevanje.

  1. Uvezena imena ne mogu biti u sukobu s klasama definiranim u istoj datoteci.
  2. Ni funkcije ni konstante se ne mogu uvesti pomoću operatora koristiti.
  3. Nazivi dinamičkog imenskog prostora (identifikatori u navodnicima) moraju izbjeći znak obrnute kose crte.
  4. Ne možete upućivati ​​na nedefinirane konstante koristeći obrnutu kosu crtu. Prikazuje se fatalna greška
  5. Nije moguće poništiti posebne konstante kao što su NULL, TRUE, FALSE, ZEND_THREAD_SAFE ili ZEND_DEBUG_BUILD

Ako ne koristim prostore imena, treba li išta od ovoga smatrati važnim?

br. Imenski prostori nemaju efekta na bilo koji postojeći kod u bilo kom obliku ili na bilo koji napisani kod koji ne sadrži prostore imena. Ako želite, možete napisati kod ovako:

Primjer #1 Pristup globalnim klasama izvan imenskih prostora

$a = novi \ stdClass;
?>

Ovo je funkcionalno ekvivalentno sljedećem:

Primjer #2 Pristup globalnim klasama izvan imenskih prostora

$a = nova stdClass;
?>

Kako da koristim unutrašnje ili globalne klase u imenskom prostoru?

Primjer #3 Pristup unutrašnjim klasama u prostorima imena

namespace foo ;
$a = novi \ stdClass;

test funkcije (\ArrayObject $type hintexample = null) ()

$a = \ DirectoryIterator :: CURRENT_AS_FILEINFO ;

// proširenje interne ili globalne klase
klasa MyException extends\Exception()
?>

Kako da koristim funkcije klase u imenskim prostorima ili konstante u njihovom vlastitom imenskom prostoru?

Primjer #4 Pristup unutrašnjim klasama, funkcijama ili konstantama u prostorima imena

namespace foo ;

klasa MyClass()

// koristi klasu iz trenutnog prostora imena
test funkcije (MyClass $type hintexample = null) ()
// drugi način korištenja klase iz trenutnog imenskog prostora
test funkcije(\foo\MyClass $typehintexample = null)()

// proširenje klase iz trenutnog prostora imena
class Extended proširuje MyClass()

// pristup globalnoj funkciji
$a = \globalfunc();

// pristup globalnoj konstanti
$b = \INI_ALL;
?>

Kako je takvo ime \moje ime ili \name konvertovan?

Imena koja počinju sa \ uvijek se pretvaraju u ono kako izgledaju, tj. \moje ime- Ovo je zapravo moje ime, And \Izuzetak- Ovo Izuzetak.

Primjer #5 Apsolutna imena

namespace foo ;
$a = novo \ moje \ ime (); // kreira instancu klase "my\name"
echo\strlen("bok"); // poziva funkciju "strlen".
$a = \INI_ALL ; // varijabli $a dodjeljuje se vrijednost konstante "INI_ALL"
?>

Kao ime moje ime konvertovan?

Imena koja sadrže obrnutu kosu crtu, ali ne počinju s jednom, kao npr moje ime

moj drugo ime, onda se ovaj sinonim odnosi na moj V moje ime.

moje ime.

Primjer #6 Puna imena

namespace foo ;
koristite bla \ bla kao foo ;

$a = novo moje\name(); // kreira instancu klase "foo\my\name"
foo\bar::name(); // poziva statičku metodu "name" u klasi "blah\blah\bar"
my\bar(); // poziva funkciju "foo\my\bar"
$a = my\BAR; // dodjeljuje varijablu $a vrijednost konstante "foo\my\BAR"
?>

Poput nekvalifikovanog naziva klase kao što je ime konvertovan?

Imena klasa koja ne sadrže obrnutu kosu crtu, kao što je ime može se pretvoriti na dva različita načina.

Ako postoji izraz za uvoz koji stvara sinonim ime drugo ime, tada se koristi ovaj sinonim.

U suprotnom, trenutno ime imenskog prostora postaje prefiks za moje ime.

Primjer #7 Nekvalificirana imena klasa

namespace foo ;
koristite bla \ bla kao foo ;

$a = novo ime(); // kreira instancu klase "foo\name"
foo::name(); // poziva statičku metodu "name" u klasi "bla\blah"
?>

Poput nekvalificiranog imena funkcije ili nekvalificiranog imena konstante kao što je ime konvertovan?

Imena funkcija ili konstanti koje ne sadrže obrnutu kosu crtu, kao što je ime može se pretvoriti na dva različita načina.

Prvo, trenutno ime imenskog prostora ima prefiks ime.

Zatim ako je konstanta ili funkcija ime ne postoji u trenutnom imenskom prostoru, koristeći globalnu konstantu ili funkciju ime, ako postoji.

Primjer #8 Nepotpuna imena funkcija ili konstanti

namespace foo ;
koristite bla \ bla kao foo ;

const FOO = 1;

funkcija moja()()
funkcija foo()()
sortiranje funkcije (& $a )
{
\sort($a); // poziva globalnu funkciju "sort"
$a = array_flip($a);
return $a ;
}

Moj(); // poziva "foo\my"
$a = strlen("hi"); // poziva globalnu funkciju "strlen" jer "foo\strlen" ne postoji
$arr = niz(1, 3, 2);
$b = sortiraj($arr); // poziva funkciju "foo\sort"
$c = foo(); // poziva funkciju "foo\foo" - uvoz nije primijenjen

$a = FOO ; // dodjeljuje varijablu $a vrijednost konstante "foo\FOO" - uvoz se ne primjenjuje
$b = INI_ALL; // dodjeljuje varijablu $b vrijednost globalne konstante "INI_ALL"
?>

Uvezena imena ne mogu biti u sukobu s klasama definiranim u istoj datoteci.

Sljedeće kombinacije skripti su važeće:

imenski prostor my\stuff;
klasa MyClass()
?>

imenski prostor drugi ;
klasa stvar()
?>

imenski prostor my\stuff;
uključiti "file1.php" ;
uključiti "another.php" ;


$a = nova MyClass; // kreira instancu klase "thing" iz imenskog prostora "another"
?>

Ne postoji sukob imena iako je klasa Moj razred postoji unutar imenskog prostora moje stvari jer je MyClass definicija u zasebnoj datoteci. Međutim, sljedeći primjer proizvodi fatalnu grešku sukoba imena jer je klasa MyClass definirana u istoj datoteci u kojoj se nalazi izraz use.

imenski prostor my\stuff;
koristiti drugu \ stvar kao MyClass ;
klasa MyClass() // fatalna greška: MyClass je u sukobu s uvoznim izrazom
$a = nova MyClass;
?>

Ugniježđeni prostori imena nisu dozvoljeni.

PHP ne dozvoljava da prostori imena budu ugniježđeni jedan u drugom

imenski prostor moje\stvari(
imenski prostor ugniježđen (
klasa foo()
}
}
?>

Međutim, da biste simulirali ugniježđene prostore imena ovako:

imenski prostor moj\stvari\ugniježđeni (
klasa foo()
}
?>

Prije PHP 5.6, ni funkcije ni konstante nisu mogle biti uvezene pomoću operatora koristiti.

Prije PHP 5.6 jedini elementi na koje utječe operator su koristiti su prostori imena i imena klasa. Da skratite duga imena konstanti ili funkcija, uvezite njihov sadržaj u prostor imena.

imenski prostor mine ;
koristite ultra\long\ns\name;

$a = ime \ CONSTANT ;
ime\func();
?>

Od PHP 5.6, postalo je moguće uvoziti i kreirati pseudonime za funkcije i imena konstanti.

Nazivi dinamičkog imenskog prostora (identifikatori u navodnicima) moraju izbjeći znak obrnute kose crte.

Veoma je važno ovo predstaviti jer se obrnuta kosa crta koristi kao izlazni znak unutar stringova. Uvijek ga treba duplicirati kada se koristi unutar niza, inače postoji rizik od neželjenih posljedica:

Primjer #9 Zamke pri korištenju imena prostora imena unutar niza u dvostrukim navodnicima

$a = "opasno\ime" ; // \n je novi red unutar niza u dvostrukim navodnicima!
$obj = novi $a;

$a = "nije\uopšte\opasno" ; // nema problema.
$obj = novi $a;
?>

Unutar nizova sa jednim navodnicima, obrnuta kosa crta kao graničnik je sigurnija, ali preporučena praksa izbjegavanja obrnute kose crte u svim nizovima je i dalje najbolja praksa.

Ne možete upućivati ​​na nedefinirane konstante koristeći obrnutu kosu crtu. Prikazuje se fatalna greška

Svaka nedefinirana konstanta koja je nekvalifikovano ime, kao što je FOO, će rezultirati porukom u kojoj se navodi da je PHP to pretpostavio FOO bila je vrijednost konstante. Svaka konstanta, s kvalificiranim ili apsolutnim imenom, koja sadrži obrnutu kosu crtu, rezultirat će fatalnom greškom ako se ne pronađe.

Primjer #10 Nedefinirane konstante

imenska traka ;
$a = FOO ; // prikazuje upozorenje: nedefinirane konstante "FOO" pretpostavlja se "FOO";
$a = \FOO ; // fatalna greška: nedefinirana konstanta imenskog prostora FOO
$a = Bar\FOO; // fatalna greška: nedefinirana konstanta imenskog prostora bar\Bar\FOO
$a = \Bar \FOO ; // fatalna greška: nedefinirana konstanta imenskog prostora Bar\FOO
?>

Nije moguće poništiti posebne konstante kao što su NULL, TRUE, FALSE, ZEND_THREAD_SAFE ili ZEND_DEBUG_BUILD

Svaki pokušaj definiranja konstante prostora imena koja odgovara imenima posebnih ugrađenih konstanti rezultirat će fatalnom greškom.

Primjer #11 Nedefinirane konstante

imenska traka ;
const NULL = 0; // Fatalna greska;
const true = "glupo" ; // takođe fatalna greška;
// itd.
?>

prije 7 godina

Postoji način da se definira konstanta s prostorom imena koja je posebna, ugrađena konstanta, korištenjem funkcije define i postavljanjem trećeg parametra case_insensitive na false:

namespace foo ;
define (__NAMESPACE__ . "\NULL" , 10 ); // definira konstantu NULL u trenutnom imenskom prostoru


?>

Nema potrebe da specificirate imenski prostor u svom pozivu za define(), kao što se to obično dešava
namespace foo ;
define(INI_ALL, "bar"); // proizvodi obavijest - Konstanta INI_ALL je već definirana. ali:

Definirati (__NAMESPACE__ . "\INI_ALL" , "bar" ); // definira konstantu INI_ALL u trenutnom imenskom prostoru
var_dump(INI_ALL); // će prikazati string(3)"bar". Ništa nesmotreno do sada. ali:

Definiraj("NULL", 10); // definira konstantu NULL u trenutnom imenskom prostoru...
var_dump(NULL); // će pokazati 10
var_dump(null); // će pokazati NULL
?>

Ako je parametar case_insensitive postavljen na true
namespace foo ;
define (__NAMESPACE__ . "\NULL" , 10 , istina ); // proizvodi obavijest - Konstantna null je već definirana
?>

prije 3 godine

Kada kreirate klase ili pozivate statičke metode iz imenskog prostora koristeći varijable, morate imati na umu da im je potreban puni imenski prostor kako bi se koristila odgovarajuća klasa; NE MOŽETE koristiti pseudonim ili kratko ime, čak i ako se poziva unutar istog imenskog prostora. Zanemarivanje da se ovo uzme u obzir može uzrokovati da vaš kod koristi pogrešnu klasu, izbaci fatalni izuzetak klase koja nedostaje ili izbaci greške ili upozorenja.

U ovim slučajevima možete koristiti magičnu konstantu __NAMESPACE__ ili direktno specificirati puni imenski prostor i ime klase. Funkcija class_exists također zahtijeva puni imenski prostor i ime klase i može se koristiti da osigura da se fatalna greška neće pojaviti zbog nedostajućih klasa.

Namespace foo ;
klasa bar(
javna statička funkcija test() (
return get_called_class();
}
}

imenski prostor Foo\Foo;
klasa Bar proširuje \Foo \Bar (
}

Var_dump(Bar::test()); // string(11) "Foo\Foo\Bar"

$bar = "Foo\Bar" ;
var_dump($bar::test()); // string(7) "Foo\Bar"

$bar = __NAMESPACE__ . "\Bar" ;
var_dump($bar::test()); // string(11) "Foo\Foo\Bar"

$bar = "Bar" ;
var_dump($bar::test()); // KOBODNA GREŠKA: Klasa "Bar" nije pronađena ili je korištena netočna klasa \Bar

U ovoj napomeni ćemo govoriti o konstantama. Kao i obično, pogledajmo sam koncept konstanti u programskim jezicima i vidimo kako su deklarirane i korištene konstante u PHP-u.

Koncept konstante i konstanti u PHP-u

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

“Matematička konstanta- količ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 (niz, neki broj) koja se ne može promijeniti tokom izvršavanja koda.

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

Konstantna imena u PHP-u su osjetljiva na velika i mala slova (velika i mala slova se razlikuju), tako da morate biti oprezni. Također postoji konvencija da se imena konstanti uvijek pišu velikim slovima.

Ime konstante mora početi slovom ili donjom crtom “_” i može se sastojati od slova, brojeva i donjih crta.

Pogledajmo jednostavan primjer korištenja konstante:

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

Za šta se koriste konstante i nije li lakše koristiti varijable?

Kao što je već spomenuto, konstante ne mogu promijeniti svoje vrijednosti tokom izvršavanja programa. Konstante obično pohranjuju trajne parametre stranice, kao što su detalji pristupa bazi podataka (host, korisničko ime i lozinka, naziv baze podataka), lokacija lokacije na disku i mnoge druge postavke.

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

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

Posljednje ažuriranje: 1.11.2015

Konstante, kao i varijable, pohranjuju određenu vrijednost, ali za razliku od varijabli, vrijednost konstanti se može postaviti samo jednom i tada je ne možemo promijeniti. Na primjer, definirajmo numeričku konstantu:

Da biste definirali konstantu, koristite operator define, koji ima sljedeći oblik: define(string $name, string $value, bool $case_sen=false) . Parametar $name prenosi ime konstante, a parametar $value njenu vrijednost. Treći opcioni parametar uzima logičku vrijednost true ili false. Ako je vrijednost lažna, tada će se prilikom korištenja konstante uzeti u obzir njen slučaj; ako je istina, slučaj neće biti uzet u obzir. U našem slučaju, treći parametar se ne koristi, pa je po defaultu lažan.

Nakon definiranja konstante, možemo je koristiti kao običnu varijablu. Jedini izuzetak je što nećemo moći promijeniti njegovu vrijednost. Druga razlika sa varijablom je u tome što ne morate koristiti znak $. Odnosno, izraz BROJ=33; neće raditi.

Predefinisane konstante

Pored konstanti koje je kreirao programer, PHP ima nekoliko ugrađenih konstanti:

    FILE__ : pohranjuje punu putanju i ime trenutnog fajla

    LINE__ : pohranjuje trenutni broj reda koji tumač obrađuje

    DIR__: pohranjuje direktorij trenutne datoteke

    FUNCTION__ : naziv funkcije koja se obrađuje

    CLASS__ : naziv trenutne klase

    METHOD__ : naziv metode koja se obrađuje

    NAMESPACE__ : ime trenutnog imenskog prostora

Na primjer, ispišimo trenutnu liniju koja se izvršava i naziv datoteke:

Provjera postojanja konstante

Da bismo provjerili da li je konstanta definirana, možemo koristiti funkciju definiranu bool (string $name). Ako je konstanta $name definirana, funkcija će vratiti true

Konstante su identifikatori (imena) jednostavnih vrijednosti. Na osnovu njihovog imena, lako je shvatiti da se njihova vrijednost ne može promijeniti tokom izvršavanja skripte (izuzeci su "magične" konstante, koje zapravo nisu konstante u punom smislu riječi). Konstantni nazivi razlikuju velika i mala slova. Po konvenciji, imena konstanti se uvijek pišu velikim slovima.

Ime konstante mora pratiti ista pravila kao i druga imena u PHP-u. Važeće ime počinje slovom ili donjom crtom i sastoji se od slova, brojeva i donjih crta. Regularni izraz za provjeru ispravnosti imena konstante izgleda ovako: *

Komentar: Koncept "slova" ovdje su znakovi a-z, A-Z i drugi znakovi sa ASCII kodovima od 127 do 255 (0x7f-0xff).

Sintaksa

Možete definirati konstantu pomoću funkcije define() ili pomoću ključne riječi konst izvan deklaracije klase od PHP 5.3.0. Jednom kada je konstanta definirana, njena vrijednost se ne može promijeniti ili poništiti.

Konstante mogu sadržavati samo skalarne podatke (boolean, integer, float i string tipovi). Također je moguće definirati konstante tipa , ali to treba izbjegavati jer može dovesti do neočekivanih rezultata.

Možete dobiti vrijednost konstante navođenjem njenog imena. Za razliku od varijabli, vi nema potrebe ispred imena konstante sa simbolom $ . Također možete koristiti funkciju constant() da dobijete vrijednost konstante ako dinamički generirate ime konstante. Koristite funkciju get_defined_constants() da dobijete listu svih deklariranih konstanti.

Komentar: Konstante i (globalne) varijable su u različitim imenskim prostorima. To znači da npr. ISTINITO i $TRUE su potpuno različite stvari.

Ako koristite nedefinisanu konstantu, PHP pretpostavlja da mislite na ime konstante, kao da ste naveli string literal (CONSTANT umesto "CONSTANT"). Ovo će generirati grešku na nivou E_NOTICE. Pogledajte i poglavlje priručnika koje objašnjava zašto je $foo pogrešan (osim ako ga prvo niste deklarirali, naravno). bar kao konstantu koristeći define()). Ako samo želite provjeriti da li je konstanta definirana, koristite definiranu() funkciju.

Razlike između konstanti i varijabli:

  • Konstante nemaju prefiks predznaka dolara ( $ );
  • Konstante se mogu definirati samo pomoću funkcije define(), a ne dodjeljivanjem vrijednosti;
  • Konstante se mogu definirati i pristupiti bilo gdje bez obzira na opseg;
  • Konstante se ne mogu redefinisati ili poništiti nakon njihove početne deklaracije; I
  • Konstante mogu imati samo skalarne vrijednosti.

"Magične" konstante

PHP obezbeđuje veliku listu unapred definisanih konstanti za svaku skriptu koju pokrenete. Mnoge od ovih konstanti su definirane različitim modulima i bit će prisutne samo ako su ti moduli dostupni kroz dinamičko učitavanje ili kroz statički sklop.

Postoji sedam magijskih konstanti koje mijenjaju svoje značenje ovisno o kontekstu u kojem se koriste. Na primjer, vrijednost __LINE__ zavisi od reda u skripti na kojem je navedena konstanta. Posebne konstante ne razlikuju velika i mala slova i navedene su u nastavku:

Neke "magične" PHP konstante
Ime Opis
__LINE__ Trenutni broj reda u datoteci.
__FILE__ Puna putanja i naziv trenutne datoteke. Ako se koristi unutar uključene datoteke, vraća se ime ove datoteke. Od verzije PHP 4.0.2, __FILE__ uvijek sadrži apsolutnu putanju sa dozvoljenim simboličkim vezama, dok bi starije verzije vratile relativnu putanju u nekim okolnostima.
__DIR__ Direktorij datoteka. Ako se koristi unutar uključene datoteke, vraća se direktorij te datoteke. Ovo je ekvivalentno pozivu dirname(__FILE__). Vraćeno ime direktorija se ne završava kosom crtom, s izuzetkom korijenskog direktorija (dodatog u PHP 5.3.0.)
__FUNCTION__ Naziv funkcije. (Dodano u PHP 4.3.0.) Od PHP 5, ova konstanta vraća ime funkcije tačno onako kako je deklarisano (razlikuje velika i mala slova). U PHP 4 ova vrijednost je uvijek bila mala slova.
__KLASA__ Ime klase. (Dodato u PHP 4.3.0) Od PHP 5, ova konstanta vraća ime klase tačno onako kako je deklarisano (razlikuje velika i mala slova). U PHP 4 ova vrijednost je uvijek bila mala slova. Ime klase sadrži ime imenskog prostora u kojem je klasa deklarirana (na primjer, Foo\Bar). Imajte na umu da od PHP5.4 __CLASS__ takođe radi u osobinama. Kada se koristi u metodama osobina, __CLASS__ je ime klase u kojoj se metode koriste.
__TRAIT__ Ime osobine. (Dodato u PHP 5.4.0) Od PHP 5.4, ova konstanta vraća ime osobine tačno onako kako je deklarisano (razlikuje velika i mala slova). Ovo ime sadrži imenski prostor u kojem je osobina deklarirana (na primjer, Foo\Bar).
__METHOD__ Ime metode klase. (Dodato u PHP 5.0.0) Ime metode se vraća onako kako je deklarirano (osjetljivo na velika i mala slova).
__NAMESPACE__ Ime trenutnog imenskog prostora (razlikuje velika i mala slova). Ova konstanta se određuje u vremenu kompajliranja (dodato u PHP 5.3.0).
Primjer #1 Ispravna i netačna imena konstanti
// Ispravna imena konstanti define("FOO", "nešto"); define("FOO2", "nešto drugo"); define("FOO_BAR", "nešto više"); // Netočna imena konstanti define("2FOO", "nešto"); // Ovo je važeća deklaracija, ali je bolje da je ne koristite: // PHP može jednog dana registrovati "magičnu" konstantu // koja će razbiti vašu skriptu define("__FOO__", "something");