Čarobne metode in vnaprej določene konstante v PHP. Ustvarjanje konstant v PHP - const in define() #3 const razume samo skalare

Lep dan vsem. Alexey Gulynin je v stiku. V zadnjem članku, ki smo si ga ogledali operator enakovrednosti v PHP. V tem članku bi rad govoril o konstante v PHP. V šoli ste pogosto naleteli na konstante, na primer »število PI« ali iz fizike univerzalno plinsko konstanto (R). Konstante so definirane enkrat in se ne spreminjajo več. Enako velja za konstante v programiranju, tj. konstanto definiramo enkrat in se v programski kodi nikoli ne spremeni. Konstante so lahko različne matematične vrednosti, poti do datotek.

Kako se konstanta razlikuje od spremenljivke:

1) Definiran je enkrat in mu ni mogoče dodeliti vrednosti nikjer drugje,
2) Če se želite sklicevati nanj, vam pred njim ni treba postaviti znaka "$" (tukaj je minus - zdaj ne moremo uporabiti imena konstante v besedilnem nizu).
Natisnimo konstanto "PI":

Obstajata dve vrsti konstant: definiran s strani tolmača in definiran s strani uporabnika:

Primeri konstant, ki jih definira tolmač:

1) __FILE__ - shrani ime datoteke, ki vsebuje kodo, ki se trenutno izvaja,
2) PHP_VERSION - različica tolmača PHP,
3) PHP_OS - različica operacijskega sistema, pod katerim deluje PHP.

Vnesite naslednjo kodo in si oglejte, katere druge konstante obstajajo:

Definirate lahko lastne konstante, to storite z uporabo operatorja define. Definirajmo 2 konstanti:

"; echo Const2; ?>

V tem primeru bomo prikazali vrednosti teh konstant.

Privzeto je ime konstante občutljivo na velike in male črke; onemogočite ga lahko z izbirnim tretjim parametrom, kot je ta:

"; echo neW1; ?>

Videli boste, da vse deluje (v prejšnjem primeru ne bo delovalo, ker je občutljivo na velike in male črke).

Bodite pozorni na narekovaje, v katerih je zapisano ime konstante. To je treba narediti. Prav tako ne morete ustvariti konstant z istimi imeni.

V PHP lahko s funkcijo preverite, ali konstanta obstaja ali ne definirano (konstantno ime). Oglejmo si primer, da bo jasno:

Vnesite ta primer in poglejte, kaj se zgodi.

(PHP 5 >= 5.3.0, PHP 7)

Ta seznam vprašanj je razdeljen na dva dela: splošna vprašanja in nekatere posebnosti izvedbe, ki so uporabne za popolnejše razumevanje.

Najprej splošna vprašanja.

  1. Če ne uporabljam imenskih prostorov, ali naj se kaj od tega obravnava kot pomembno?
  2. Kako uporabim notranje ali globalne razrede v imenskem prostoru?
  3. Kako uporabim funkcije razreda v imenskih prostorih ali konstante v lastnem imenskem prostoru?
  4. Kako je tako ime \moje ime oz \ime pretvorjen?
  5. Kot ime kot moje ime pretvorjen?
  6. Kot nekvalificirano ime razreda, kot je npr ime pretvorjen?
  7. Kot nekvalificirano ime funkcije ali nekvalificirano konstantno ime, kot je npr ime pretvorjen?

Nekatere podrobnosti implementacije imenskega prostora, ki jih je koristno razumeti.

  1. Uvožena imena ne morejo biti v nasprotju z razredi, definiranimi v isti datoteki.
  2. Z operatorjem ni mogoče uvoziti niti funkcij niti konstant uporaba.
  3. Imena dinamičnih imenskih prostorov (identifikatorji v narekovajih) se morajo izogibati znaku poševnice nazaj.
  4. Na nedefinirane konstante se ne morete sklicevati s poševnico nazaj. Prikaže se usodna napaka
  5. Posebnih konstant, kot so NULL, TRUE, FALSE, ZEND_THREAD_SAFE ali ZEND_DEBUG_BUILD, ni mogoče preglasiti.

Če ne uporabljam imenskih prostorov, ali naj se kaj od tega obravnava kot pomembno?

št. Imenski prostori ne vplivajo na nobeno obstoječo kodo v kakršni koli obliki ali na katero koli napisano kodo, ki ne vsebuje imenskih prostorov. Če želite, lahko napišete kodo, kot je ta:

Primer #1 Dostop do globalnih razredov zunaj imenskih prostorov

$a = nov \ stdClass ;
?>

To je funkcionalno enakovredno naslednjemu:

Primer #2 Dostop do globalnih razredov zunaj imenskih prostorov

$a = nov stdClass;
?>

Kako uporabim notranje ali globalne razrede v imenskem prostoru?

Primer #3 Dostopanje do notranjih razredov v imenskih prostorih

imenski prostor foo;
$a = nov \ stdClass ;

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

$a = \ DirectoryIterator :: CURRENT_AS_FILEINFO ;

// razširitev notranjega ali globalnega razreda
razred MyException extends\Exception()
?>

Kako uporabim funkcije razreda v imenskih prostorih ali konstante v lastnem imenskem prostoru?

Primer #4 Dostopanje do notranjih razredov, funkcij ali konstant v imenskih prostorih

imenski prostor foo;

razred MyClass()

// uporabi razred iz trenutnega imenskega prostora
preizkus funkcije (MyClass $type hintexample = null) ()
// drug način za uporabo razreda iz trenutnega imenskega prostora
preizkus funkcije (\foo\MyClass $typehintexample = null)()

// razširitev razreda iz trenutnega imenskega prostora
razred Extended razširi MyClass()

// dostop do globalne funkcije
$a = \globalfunc();

// dostop do globalne konstante
$b = \INI_ALL ;
?>

Kako je tako ime \moje ime oz \ime pretvorjen?

Imena, ki se začnejo z \ se vedno pretvorijo v to, kar izgledajo, tj. \moje ime- to je pravzaprav moje ime, In \Izjema- To Izjema.

Primer #5 Absolutna imena

imenski prostor foo;
$a = novo \ moje \ ime (); // ustvari primerek razreda "my\name"
echo\strlen("živjo"); // pokliče funkcijo "strlen".
$a = \INI_ALL ; // spremenljivki $a je dodeljena vrednost konstante "INI_ALL"
?>

Kot ime kot moje ime pretvorjen?

Imena, ki vsebujejo poševnico nazaj, vendar se z njo ne začnejo, kot npr moje ime

moj drugo ime, potem ta sinonim velja za moj V moje ime.

moje ime.

Primer #6 Polna imena

imenski prostor foo;
uporabite bla \ bla kot foo ;

$a = novo moje\ime(); // ustvari primerek razreda "foo\my\name"
foo\bar::name(); // pokliče statično metodo "name" v razredu "blah\blah\bar"
moja\bar(); // pokliče funkcijo "foo\my\bar"
$a = moj\BAR; // spremenljivki $a dodeli vrednost konstante "foo\my\BAR"
?>

Kot nekvalificirano ime razreda, kot je npr ime pretvorjen?

Imena razredov, ki ne vsebujejo poševnice nazaj, kot npr ime se lahko pretvori na dva različna načina.

Če obstaja izraz za uvoz, ki ustvari sinonim ime drugo ime, potem se uporablja ta sinonim.

V nasprotnem primeru ime trenutnega imenskega prostora postane predpona do moje ime.

Primer #7 Nekvalificirana imena razredov

imenski prostor foo;
uporabite bla \ bla kot foo ;

$a = novo ime(); // ustvari primerek razreda "foo\name"
foo::name(); // pokliče statično metodo "name" v razredu "blah\blah"
?>

Kot nekvalificirano ime funkcije ali nekvalificirano konstantno ime, kot je npr ime pretvorjen?

Imena funkcij ali konstant, ki ne vsebujejo poševnice nazaj, kot npr ime se lahko pretvori na dva različna načina.

Prvič, ime trenutnega imenskega prostora ima predpono ime.

Potem, če je konstanta ali funkcija ime ne obstaja v trenutnem imenskem prostoru z uporabo globalne konstante ali funkcije ime, če obstaja.

Primer #8 Nepopolna imena funkcij ali konstant

imenski prostor foo;
uporabite bla \ bla kot foo ;

const FOO = 1;

funkcija moj()()
funkcija foo()()
razvrščanje funkcij (& $a)
{
\razvrsti($a); // pokliče globalno funkcijo "sort"
$a = array_flip($a);
vrni $a;
}

Moj(); // kliče "foo\my"
$a = strlen("zdravo"); // pokliče globalno funkcijo "strlen", ker "foo\strlen" ne obstaja
$arr = niz(1, 3, 2);
$b = sort($arr); // pokliče funkcijo "foo\sort"
$c = foo(); // pokliče funkcijo "foo\foo" - uvoz ni uporabljen

$a = FOO ; // spremenljivki $a dodeli vrednost konstante "foo\FOO" - uvoz ni uporabljen
$b = INI_ALL ; // spremenljivki $b dodeli vrednost globalne konstante "INI_ALL"
?>

Uvožena imena ne morejo biti v nasprotju z razredi, definiranimi v isti datoteki.

Veljavne so naslednje kombinacije skriptov:

imenski prostor moje\stvari;
razred MyClass()
?>

imenski prostor drug ;
razredna stvar()
?>

imenski prostor moje\stvari;
vključi "file1.php" ;
vključi "drugi.php" ;


$a = nov moj razred; // ustvari primerek razreda "stvar" iz imenskega prostora "drugo"
?>

Ni konflikta imena, čeprav razred Moj razred obstaja znotraj imenskega prostora moje stvari ker je definicija MyClass v ločeni datoteki. Vendar naslednji primer povzroči usodno napako navzkrižja imen, ker je razred MyClass definiran v isti datoteki, kjer se nahaja izjava o uporabi.

imenski prostor moje\stvari;
uporabi drugo \ stvar kot MyClass ;
razred MyClass() // usodna napaka: MyClass je v sporu z uvoznim izrazom
$a = nov moj razred;
?>

Ugnezdeni imenski prostori niso dovoljeni.

PHP ne dovoljuje ugnezdenja imenskih prostorov drug v drugega

imenski prostor moje\stvari(
imenski prostor ugnezden (
razred foo()
}
}
?>

Če želite simulirati ugnezdene imenske prostore, kot je ta:

imenski prostor my\stuff\nested (
razred foo()
}
?>

Pred PHP 5.6 niti funkcij niti konstant ni bilo mogoče uvoziti z uporabo operatorja uporaba.

Pred PHP 5.6 so bili edini elementi, na katere vpliva operater uporaba so imenski prostori in imena razredov. Če želite skrajšati dolga imena konstant ali funkcij, uvozite njihovo vsebino v imenski prostor.

rudnik imenskega prostora ;
uporabite ultra\dolgo\ns\ime;

$a = ime \ KONSTANTA ;
ime\funk();
?>

Od PHP 5.6 je postalo mogoče uvažati in ustvarjati vzdevke za funkcije in konstantna imena.

Imena dinamičnih imenskih prostorov (identifikatorji v narekovajih) se morajo izogibati znaku poševnice nazaj.

To je zelo pomembno predstaviti, ker se poševnica nazaj uporablja kot ubežni znak znotraj nizov. Kadar se uporablja znotraj niza, ga je treba vedno podvojiti, sicer obstaja nevarnost nenamernih posledic:

Primer #9 Pasti pri uporabi imena imenskega prostora znotraj niza z dvojnimi narekovaji

$a = "nevarno\ime" ; // \n je nova vrstica v nizu z dvojnimi narekovaji!
$obj = novo $a ;

$a = "ni\sploh\nevarno" ; // tukaj ni problema.
$obj = novo $a ;
?>

Znotraj nizov z enojnimi narekovaji je poševnica nazaj kot ločilo varnejša, vendar je priporočena praksa izogibanja poševnici nazaj v vseh nizih še vedno najboljša praksa.

Na nedefinirane konstante se ne morete sklicevati s poševnico nazaj. Prikaže se usodna napaka

Vsaka nedefinirana konstanta, ki je nekvalificirano ime, kot npr FOO, se bo prikazalo sporočilo, da je PHP domneval, da FOO je bila vrednost konstante. Vsaka konstanta s kvalificiranim ali absolutnim imenom, ki vsebuje znak za poševnico nazaj, bo povzročila usodno napako, če je ne bo mogoče najti.

Primer #10 Nedefinirane konstante

vrstica imenskega prostora;
$a = FOO ; // prikaže opozorilo: nedefinirane konstante "FOO" predpostavljene "FOO";
$a = \FOO ; // usodna napaka: nedefinirana konstanta imenskega prostora FOO
$a = Bar\FOO; // usodna napaka: nedefinirana konstanta imenskega prostora bar\Bar\FOO
$a = \Bar \FOO ; // usodna napaka: nedefinirana konstanta imenskega prostora Bar\FOO
?>

Posebnih konstant, kot so NULL, TRUE, FALSE, ZEND_THREAD_SAFE ali ZEND_DEBUG_BUILD, ni mogoče preglasiti.

Vsak poskus definiranja konstante imenskega prostora, ki se ujema z imeni posebnih vgrajenih konstant, bo povzročil usodno napako.

Primer #11 Nedefinirane konstante

vrstica imenskega prostora;
const NULL = 0; // Usodna napaka;
const true = "neumno"; // tudi usodna napaka;
// itd.
?>

pred 7 leti

Obstaja način za definiranje konstante imenskega prostora, ki je posebna, vgrajena konstanta, z uporabo funkcije define in nastavitvijo tretjega parametra case_insensitive na false:

imenski prostor foo;
definiraj (__NAMESPACE__. "\NULL", 10); // definira konstanto NULL v trenutnem imenskem prostoru


?>

Ni vam treba določiti imenskega prostora v vašem klicu za define(), kot se običajno zgodi
imenski prostor foo;
definiraj (INI_ALL, "vrstica"); // ustvari obvestilo - Konstanta INI_ALL je že definirana. Ampak:

Definiraj (__NAMESPACE__ . "\INI_ALL" , "bar" ); // definira konstanto INI_ALL v trenutnem imenskem prostoru
var_dump(INI_ALL); // bo pokazal string(3)"bar". Nič neopaženega do sedaj. Ampak:

Definiraj ("NULL", 10); // definira konstanto NULL v trenutnem imenskem prostoru ...
var_dump(NULL); // bo prikazano 10
var_dump(null); // bo prikazal NULL
?>

Če je parameter case_insensitive nastavljen na true
imenski prostor foo;
definiraj (__NAMESPACE__. "\NULL", 10, res); // ustvari obvestilo - Konstanta nič je že definirana
?>

3 leta nazaj

Ko ustvarjate razrede ali kličete statične metode znotraj imenskih prostorov z uporabo spremenljivk, morate upoštevati, da zahtevajo celoten imenski prostor, da se lahko uporabi ustrezen razred; NE MORETE uporabiti vzdevka ali kratkega imena, tudi če je klicano znotraj istega imenskega prostora. Če tega ne upoštevate, lahko vaša koda uporabi napačen razred, vrže usodno izjemo manjkajočega razreda ali vrže napake ali opozorila.

V teh primerih lahko uporabite čarobno konstanto __NAMESPACE__ ali neposredno podate celoten imenski prostor in ime razreda. Funkcija class_exists prav tako zahteva celoten imenski prostor in ime razreda ter se lahko uporabi za zagotovitev, da ne bo prišlo do usodne napake zaradi manjkajočih razredov.

Imenski prostor foo ;
vrstica razreda(
javni statični funkcijski test() (
vrni get_ called_class();
}
}

imenski prostor Foo\Foo;
razred Bar razširi \Foo \Bar (
}

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

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

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

$bar = "Bar" ;
var_dump($bar::test()); // USODNA NAPAKA: Razreda "Bar" ni mogoče najti ali pa je uporabljen napačen razred \Bar

V tej opombi bomo govorili o konstantah. Kot običajno si poglejmo sam koncept konstant v programskih jezikih in poglejmo, kako so deklarirane in uporabljene konstante v PHP.

Koncept konstante in konstante v PHP

Beseda konstanta vam je že znana iz matematike:

»Matematična konstanta- količina, katere vrednost se ne spreminja.«

Enako je v PHP. Konstanta v PHP je identifikator, ki služi za označevanje enostavne vrednosti (niz, neko število), ki se med izvajanjem kode ne more spremeniti.

Če želite deklarirati konstanto (ji dodeliti vrednost), uporabite funkcijo opredeliti. Primer konstantne deklaracije:

Imena konstant v PHP so občutljiva na velike in male črke (velike in male črke se razlikujejo), zato morate biti previdni. Obstaja tudi dogovor, da se imena konstant vedno pišejo z velikimi črkami.

Ime konstante se mora začeti s črko ali podčrtajem »_« in je lahko sestavljeno iz črk, številk in podčrtajev.

Poglejmo preprost primer uporabe konstante:

V tem primeru smo deklarirali konstanto in jo uporabili v programu.

Za kaj se uporabljajo konstante in ali ni lažje uporabljati spremenljivke?

Kot že omenjeno, konstante ne morejo spremeniti svojih vrednosti med izvajanjem programa. Konstante običajno shranjujejo stalne parametre mesta, kot so podrobnosti o dostopu do baze podatkov (gostitelj, uporabniško ime in geslo, ime baze podatkov), lokacija mesta na disku in številne druge nastavitve.

Če uporabljamo spremenljivke, lahko skript pomotoma (v primeru napake) spremeni vrednost spremenljivke in ne bo deloval, kot ste nameravali.

Uporaba konstant zagotavlja, da vrednost, ki jo podate pri deklaraciji konstante, ostane nespremenjena.

Zadnja posodobitev: 1.11.2015

Konstante, tako kot spremenljivke, hranijo določeno vrednost, vendar za razliko od spremenljivk lahko konstantam vrednost nastavimo samo enkrat, potem pa je ne moremo spreminjati. Na primer, definirajmo numerično konstanto:

Če želite definirati konstanto, uporabite operator define, ki ima naslednjo obliko: define(string $name, string $value, bool $case_sen=false) . Parameter $name posreduje ime konstante, parameter $value pa njeno vrednost. Tretji neobvezni parameter ima logično vrednost true ali false. Če je vrednost false, se pri uporabi konstante upoštevajo njene velike in male črke; če je resnična, se velike in male črke ne upoštevajo. V našem primeru tretji parameter ni uporabljen, zato je privzeto false.

Ko definiramo konstanto, jo lahko uporabljamo kot običajno spremenljivko. Edina izjema je, da njegove vrednosti ne bomo mogli spremeniti. Druga razlika pri spremenljivki je, da vam ni treba uporabiti znaka $. To je izraz ŠTEVILO=33; ne bo delovalo.

Vnaprej določene konstante

Poleg konstant, ki jih ustvari programer, ima PHP več vgrajenih konstant:

    FILE__ : shrani celotno pot in ime trenutne datoteke

    LINE__ : shrani trenutno številko vrstice, ki jo tolmač obdeluje

    DIR__: shrani imenik trenutne datoteke

    FUNCTION__ : ime funkcije, ki se obdeluje

    CLASS__ : ime trenutnega razreda

    METHOD__ : ime metode, ki se obdeluje

    NAMESPACE__ : ime trenutnega imenskega prostora

Na primer, natisnimo trenutno vrstico, ki se izvaja, in ime datoteke:

Preverjanje obstoja konstante

Če želite preveriti, ali je konstanta definirana, lahko uporabimo funkcijo bool defined(string $name). Če je definirana konstanta $name, bo funkcija vrnila true

Konstante so identifikatorji (imena) preprostih vrednosti. Iz njihovega imena je enostavno razbrati, da se njihova vrednost med izvajanjem skripta ne more spreminjati (izjema so »magične« konstante, ki dejansko niso konstante v polnem pomenu besede). Imena konstant razlikujejo med velikimi in malimi črkami. Po dogovoru so imena konstant vedno zapisana z velikimi črkami.

Ime konstante mora upoštevati enaka pravila kot druga imena v PHP. Veljavno ime se začne s črko ali podčrtajem in je sestavljeno iz črk, številk in podčrtajev. Regularni izraz za preverjanje pravilnosti konstantnega imena izgleda takole: *

Komentiraj: Pojem "črke" tukaj so znaki a-z, A-Z in drugi znaki s kodami ASCII od 127 do 255 (0x7f-0xff).

Sintaksa

Konstanto lahko definirate s funkcijo define() ali s ključno besedo konst zunaj deklaracije razreda od PHP 5.3.0 naprej. Ko je konstanta definirana, njene vrednosti ni več mogoče spremeniti ali razveljaviti.

Konstante lahko vsebujejo le skalarne podatke (logične, cele, float in nizovne vrste). Možno je tudi definirati konstante tipa , vendar se je temu treba izogibati, saj lahko povzroči nepričakovane rezultate.

Vrednost konstante lahko dobite tako, da podate njeno ime. Za razliko od spremenljivk, ti ni potrebno pred imenom konstante postavite simbol $ . Za pridobitev vrednosti konstante lahko uporabite tudi funkcijo constant(), če ime konstante ustvarjate dinamično. Uporabite funkcijo get_defined_constants(), da dobite seznam vseh deklariranih konstant.

Komentiraj: Konstante in (globalne) spremenljivke so v različnih imenskih prostorih. To pomeni, da npr. PRAV in $TRUE sta popolnoma različni stvari.

Če uporabljate nedefinirano konstanto, PHP predpostavlja, da mislite na ime konstante, kot če bi določili literal niza (CONSTANT namesto "CONSTANT"). To bo ustvarilo napako ravni E_NOTICE. Glejte tudi poglavje priročnika, ki pojasnjuje, zakaj je $foo napačen (razen če ste ga najprej deklarirali, seveda). bar kot konstanto z uporabo define()). Če želite le preveriti, ali je konstanta definirana, uporabite funkcijo defined().

Razlike med konstantami in spremenljivkami:

  • Konstante nimajo predpone znaka za dolar ( $ );
  • Konstante je mogoče definirati samo s funkcijo define(), ne pa z dodeljevanjem vrednosti;
  • Konstante je mogoče definirati in do njih dostopati kjerkoli ne glede na obseg;
  • Konstant ni mogoče ponovno definirati ali razveljaviti po njihovi začetni deklaraciji; in
  • Konstante imajo lahko samo skalarne vrednosti.

"Čarobne" konstante

PHP nudi velik seznam vnaprej določenih konstant za vsak skript, ki ga zaženete. Mnoge od teh konstant definirajo različni moduli in bodo prisotne samo, če so ti moduli na voljo prek dinamičnega nalaganja ali statičnega sestavljanja.

Obstaja sedem magičnih konstant, ki spreminjajo svoj pomen glede na kontekst, v katerem so uporabljene. Na primer vrednost __LINE__ odvisno od vrstice v skriptu, v kateri je podana ta konstanta. Posebne konstante ne razlikujejo med velikimi in malimi črkami in so navedene spodaj:

Nekaj ​​"čarobnih" PHP konstant
Ime Opis
__LINE__ Trenutna številka vrstice v datoteki.
__MAPA__ Polna pot in ime trenutne datoteke. Če se uporablja znotraj vključene datoteke, se vrne ime te datoteke. Od različice PHP 4.0.2 naprej __MAPA__ vedno vsebuje absolutno pot z dovoljenimi simbolnimi povezavami, medtem ko bi starejše različice v nekaterih okoliščinah vrnile relativno pot.
__DIR__ Imenik datotek. Če se uporablja znotraj vključene datoteke, se vrne imenik te datoteke. To je enako klicanju dirname(__FILE__). Vrnjeno ime imenika se ne konča s poševnico, z izjemo korenskega imenika (dodan v PHP 5.3.0.)
__FUNKCIJA__ Ime funkcije. (Dodano v PHP 4.3.0.) Od PHP 5 dalje ta konstanta vrne ime funkcije točno tako, kot je bilo deklarirano (razlikuje med velikimi in malimi črkami). V PHP 4 je bila ta vrednost vedno z malimi črkami.
__RAZRED__ Ime razreda. (Dodano v PHP 4.3.0) Od PHP 5 naprej ta konstanta vrne ime razreda točno tako, kot je bilo deklarirano (razlikuje med velikimi in malimi črkami). V PHP 4 je bila ta vrednost vedno z malimi črkami. Ime razreda vsebuje ime imenskega prostora, v katerem je bil razred deklariran (npr. Foo\Bar). Upoštevajte, da od PHP5.4 __CLASS__ deluje tudi v lastnostih. Ko se uporablja v metodah lastnosti, je __CLASS__ ime razreda, v katerem se metode uporabljajo.
__LAST__ Ime lastnosti. (Dodano v PHP 5.4.0) Od PHP 5.4 naprej ta konstanta vrne ime lastnosti točno tako, kot je bilo deklarirano (razlikuje med velikimi in malimi črkami). To ime vsebuje imenski prostor, v katerem je bila lastnost deklarirana (npr. Foo\Bar).
__METOD__ Ime metode razreda. (Dodano v PHP 5.0.0) Ime metode je vrnjeno tako, kot je bilo deklarirano (razlikuje med velikimi in malimi črkami).
__NAMESPACE__ Ime trenutnega imenskega prostora (razlikuje med velikimi in malimi črkami). Ta konstanta je določena v času prevajanja (dodano v PHP 5.3.0).
Primer #1 Pravilna in nepravilna imena konstant
// Popravi imena konstant define("FOO", "something"); define("FOO2", "nekaj drugega"); define("FOO_BAR", "nekaj več"); // Nepravilna imena konstant define("2FOO", "nekaj"); // To je veljavna deklaracija, vendar je bolje, da je ne uporabljate: // PHP lahko nekega dne registrira "čarobno" konstanto // ki bo pokvarila vaš skript define("__FOO__", "something");