PHP állandók. Gyakran feltett kérdések (GYIK): tudnivalók a névterekről Php konstans létrehozása

Vannak olyan esetek, amikor a változókat meglehetősen kényelmetlen használni olyan meghatározott értékek állandó tárolására, amelyek nem változnak a program működése során. Ilyen értékek lehetnek matematikai állandók, fájlokhoz vezető utak, különféle jelszavak stb. Éppen ezért a PHP olyan konstrukciót biztosít, mint a.

egy megnevezett érték, amely a program (szkript) végrehajtása során nem változik.

A PHP-ben az állandókat a függvény határozza meg define () ... Ennek a funkciónak a formátuma a következő:

meghatározza ($ név, $ érték, $ case_sen), hol:

$ név - az állandó neve;
$ érték - az állandó értéke;
$ case_sen - opcionális logikai paraméter,
jelezve, hogy kis- és nagybetűk különböztessék-e (igaz) vagy sem (hamis)

Példa az állandók definiálására és használatára a PHP-ben:


echo pi;
// Nyomtat 3.14
?>

Ha paraméter $ case_sen egyenlő igaz, akkor az értelmező tiszteletben tartja a karakterek esetét, ha állandóval dolgozik. Felhívjuk figyelmét, hogy az állandókat vezető jel nélkül használják $ .

Konstanták és változók közötti különbségek:

    Az állandóknak nincs dollárjel előtagjuk ( $ );

    Az állandókat csak a függvény segítségével lehet meghatározni define () ahelyett, hogy értéket rendelne;

    Az állandók bárhol meghatározhatók és hozzáférhetők, a hatókörtől függetlenül;

    Az állandók nem határozhatók meg vagy érvényteleníthetők az első nyilatkozat után;

    Az állandók csak skaláris értékekkel rendelkezhetnek.

Állandók meglétének ellenőrzése

Az állandó létezésének ellenőrzéséhez használhatja a függvényt meghatározott () ... Ez a függvény visszatér igazha konstansot deklarálunk. Mondjunk egy példát:

// Nyilatkozjuk az állandó pi értéket
define ("pi", 3.14, igaz);
ha (definiált ("pi") \u003d\u003d igaz) visszhang - Kijelentették az állandó pi-t!;
// A szkript kinyomtatja a "Constant pi deklarált!"
?>

A PHP előre definiált állandók

A következő előre definiált állandók léteznek a PHP-ben:

A PHP minden végrehajtott szkripthez előre definiált konstansok nagy listáját tartalmazza. Ezen állandók közül sokat különféle modulok határoznak meg, és csak akkor lesznek jelen, ha ezek a modulok rendelkezésre állnak dinamikus terhelés vagy statikus felépítés eredményeként.

Öt előre definiált konstans van, amelyek megváltoztatják jelentésüket attól függően, hogy milyen környezetben használják őket. Például az állandó __VONAL__ attól függ, hogy a szkript melyik sorában van megadva ez az állandó. A speciális állandók a kis- és nagybetűk szempontjából érzéketlenek, és az alábbiakban szerepelnek:

Név Leírás
__VONAL__ A fájl aktuális sora.
__FILE__ Az aktuális fájl teljes elérési útja és neve.
__DIR__ A fájl könyvtárát. Ha az include-on belül használják, akkor a mellékelt fájl könyvtárát adja vissza. Ez egyenértékű a dirname (__ FILE__). Ez a könyvtárnév nem rendelkezik zárójellel, kivéve, ha ez a gyökérkönyvtár.
__FUNKCIÓ__ Funkció neve. (Hozzáadva a PHP 4.3.0-ba.)
__OSZTÁLY__ Osztály név. (Hozzáadva a PHP 4.3.0-ba.)
__JELLEMVONÁS__ A tulajdonság neve. A tulajdonság neve tartalmazza azt a névteret, amelyben deklarálták (pl. Foo \\ Bar).
__MÓDSZER__ Az osztály metódusának neve. (Hozzáadva a PHP 5.0.0-ba)
__NAMESPACE__ Az aktuális névtér neve.

Továbbá

Az állandó egy egyszerű érték azonosítója (neve). Ahogy a neve is sugallja, jelentésük a szkript végrehajtása során nem változhat (kivéve a varázsállandókat, amelyek valójában nem konstansok). Az alapértelmezett állandó nevek megkülönböztetik a kis- és nagybetűket. Megállapodás szerint az állandó neveket mindig nagybetűvel írják.

Az állandó névnek ugyanolyan elnevezési szokásokat kell követnie, mint a PHP többi neve. Az érvényes név betűvel vagy aláhúzással kezdődik, amelyet tetszőleges számú betű, szám és aláhúzás követ. A konstans neve helyes ellenőrzésére szolgáló reguláris kifejezés így néz ki: ^ * $

A függvény segítségével állandókat lehet definiálni define () fenntartott vagy akár helytelen nevek, amelyek értékeit (csak) függvényen keresztül lehet megszerezni állandó ()... Ez azonban nem ajánlott.

1. példa Helyes és helytelen állandó nevek

// Helyes állandó nevek
define ("FOO", "valami");
define ("FOO2", "valami más");
define ("FOO_BAR", "valami több");

// Érvénytelen konstans nevek
define ("2FOO", "valami");

// Ez egy érvényes nyilatkozat, de a legjobb, ha nem használja:
// a PHP egy napon regisztrálhat egy varázsállandót,
// ami megtöri a szkriptet
define ("__FOO__", "valami");

?>

Megjegyzés: A "betűk" fogalma itt az a-z, A-Z és más karakterek, ASCII kódokkal 128-tól 255-ig (0x80-0xff).

2 évvel ezelőtt

Az állandók teljesítménye. PHP 7.1.10 32 bit (Opcache aktív, Windows 10 i7-64bits), de látszólag a trendek megegyeznek az 5.x-szel

a DEFINE által deklarált konstans ("CNS" érték) alkalmazásával: 0,63575601577759s
konstans által deklarált konstans segítségével CNS \u003d érték: 0,61372208595276s
$ v \u003d value: 0.51184010505676s által deklarált változó használatával

Átlagosan a DEFINE és a CONST használata nagyjából megegyezik, a DEFINE helyett a CONST némi láthatóan jobb teljesítményével. A változó használata azonban 10-50% -kal jobb, mint az állandó használata. Tehát egy teljesítményigényes feladat esetében az állandó nem a legjobb megoldás.

$ p1 \u003d mikrotime (igaz);
$ x \u003d 0;
for ($ i \u003d 0; $ i<50000000;$i++) {
$ x + \u003d CNS;
}
$ p2 \u003d mikrotime (igaz);

14 évvel ezelőtt

Egy nem definiált konstans igaznak minősül, ha nem megfelelően használják. Mondjuk például, hogy volt valami ilyesmi:

settings.php
// Hibakeresési mód
define ("DEBUG", hamis);
?>

test.php
include ("settings.php");

ha (DEBUG) (
// visszhangoz néhány érzékeny adatot.
}
?>

Ha valamilyen oknál fogva a settings.php nem kerül be, és a DEBUG konstans nincs beállítva, akkor a PHP MÉG MEG nyomtatja az érzékeny adatokat. A megoldás az, hogy kiértékeli őket. Így:

settings.php
// Hibakeresési mód
define ("DEBUG", 0);
?>

test.php
include ("settings.php");

ha (DEBUG \u003d\u003d 1) (
// visszhangoz néhány érzékeny adatot.
}
?>

Most helyesen működik.

Utolsó frissítés: 2015.11.1

Az állandók, mint a változók, tárolnak egy bizonyos értéket, de a változóktól eltérően az állandók értéke csak egyszer állítható be, és akkor már nem változtathatjuk meg. Például definiáljunk egy numerikus állandót:

Konstans definiálásához a definíciót kell használni, amelynek a következő formája van: define (string $ név, string string \u003d bool $ case_sen \u003d hamis). A $ name paraméter átadja az állandó nevét, a $ value paraméter pedig az értékét. A harmadik opcionális paraméter a logikai értéket true vagy false értékre veszi. Ha az érték hamis, akkor a konstans használatakor annak esetét vesszük figyelembe, ha igaz - az esetet nem vesszük figyelembe. Esetünkben a harmadik paramétert nem használjuk, ezért alapértelmezés szerint hamis.

Az állandó meghatározása után ugyanúgy használhatjuk, mint egy reguláris változót. Az egyetlen kivétel az, hogy nem tudjuk megváltoztatni az értékét. Egy másik különbség a változótól, hogy nem kell használni a $ jelet. Vagyis a SZÁM \u003d 33 kifejezés; nem fog működni.

Előre definiált állandók

A programozó által létrehozott állandókon kívül a PHP több beépített állandóval rendelkezik:

    FÁJL: az aktuális fájl teljes elérési útját és nevét tárolja

    LINE__: eltárolja az aktuális sorszámot, amelyet a tolmács feldolgoz

    DIR__: tárolja az aktuális fájl könyvtárát

    FUNCTION__: a feldolgozás alatt álló függvény neve

    OSZTÁLY__: az aktuális osztály neve

    METHOD__: a feldolgozott módszer neve

    Névtér: az aktuális névtér neve

Például jelenítsük meg az aktuális futtatható sort és a fájl nevét:

Állandóság meglétének ellenőrzése

Annak ellenőrzéséhez, hogy definiálva vannak-e az állandók, használhatjuk a bool definiált (string $ name) függvényt. Ha az állandó $ név meg van adva, akkor a függvény igaz értéket ad vissza

Állandóak olyan értékek, amelyek az idő múlásával nem változnak. Még az iskolából valószínűleg sok állandót ismer, például a számát p, szám e, a szabadesés gyorsulása és mások. És természetesen a programozás során nagyon gyakran be kell lépni állandók... És hogyan konstansok létrehozása és használata a PHP-ben, ebben a cikkben fogunk beszélni.

Menjünk veled konstans létrehozása számok p:

meghatározzuk (PI, 3,1415926);
visszhang PI;
?>

Operátor meghatározza teremt állandó PI és értéket rendel hozzá 3.1415926 ... Ezután ezt az állandót a kezelőn keresztül adjuk ki visszhang... Minden nagyon egyszerű, azonban van egy ajánlás, amelyet mindig azt tanácsolok, hogy kövesse. Feltétlenül írjon állandók nagybetűvel. Nem mintha szükség lenne rá, de nagyon kívánatos. És így nemcsak Magyarországon fogadják el PHP, de más nyelveken is.

Természetesen utólag változási állandó A PI nem lesz lehetséges (ezért állandó).

Most elemezzünk egy ellenőrző funkciót: " Meghatározott az adott állandóÍrjunk egy ilyen szkriptet:

ha (! definiált ("PI")) definiálja (PI, 3.1415926);
visszhang PI;
?>

Itt egy konstans létezését ellenőrizzük PI... És ha nem létezik (vagyis define () függvény visszatért hamis), akkor inicializáljuk ezt az állandót. Aztán csak megjelenítjük.

Amint láthatja, hozza létre és használja a konstansok a PHP-ben - ez nagyon egyszerű.

És végül már szeretnék erről beszélni pHP beépített állandók... Írjunk veled egy egyszerű szkriptet:

phpinfo ();
?>

A vége felé van egy szakasz " PHP változóValójában ez nem egészen így van állandókazonban azok állandók a szkript végrehajtásakor. Természetesen, ha egy másik szkript végrehajtásra kerül, akkor azoknak már más értékei lesznek (természetesen nem mind). Hozzunk magunkkal egy párat állandók, hogy megértse, hogyan kell velük dolgozni, mert őrülten gyakran használják őket:

echo $ _SERVER ["REMOTE_ADDR"];
visszhang "
";
echo $ _SERVER ["QUERY_STRING"];
?>

Ebben a szkriptben kiadjuk A felhasználó IP-címeelindította a szkriptet, és a következő sorban jelenítse meg a lekérdezési karakterláncot (például " index.php? id \u003d 7"). Kicsit előre futva azt mondom, hogy itt egy globálissal dolgozunk tömb $ _SERVER... Később megismerkedünk a tömbökkel, de úgy gondolom, hogy azok, akik más programozási nyelvek tömbjeivel dolgoztak, gond nélkül megtanulják a szintaxist. Ami másokat illeti állandók, akkor a velük való munka hasonló.

Minden végrehajtott szkripthez. Ezen állandók közül sokat különféle modulok határoznak meg, és csak akkor lesznek jelen, ha ezek a modulok rendelkezésre állnak dinamikus terhelés vagy statikus felépítés eredményeként.

Kilenc mágikus konstans létezik, amelyek a használatuk összefüggéseitől függően megváltoztatják jelentésüket. Például az érték __VONAL__ attól függ, hogy a szkript melyik sorában adja meg ezt az állandót. Minden mágikus konstans fordítási időben oldódik fel, ellentétben a normál állandókkal, amelyek futás közben feloldódnak. A speciális állandók a kis- és nagybetűk szempontjából érzéketlenek, és az alábbiakban szerepelnek:

Néhány varázslatos PHP konstans
Név Leírás
__VONAL__ A fájl aktuális sorszáma.
__FILE__ Az aktuális fájl teljes elérési útja és neve kibővített szimplainkkal. Ha egy include fájlban használják, akkor az adott fájl neve visszatér.
__DIR__ Fájlkönyvtár. Ha egy include fájlban használják, akkor a fájl könyvtárát adja vissza. Ez egyenértékű a hívással dirname (__ FILE__)... A visszaküldött könyvtárnév nem végződik perjellel, a gyökérkönyvtár kivételével.
__FUNKCIÓ__ Funkció neve vagy (bezárás) anonim függvény esetén.
__OSZTÁLY__ Osztály név. Ez a név tartalmazza annak a névtérnek a nevét, amelyben az osztályt deklarálták (például Foo \\ Bár). Felhívjuk figyelmét, hogy mivel a PHP 5.4 __CLASS__ tulajdonságokban is működik. Ha vonásmódszerekben használják, akkor a __CLASS__ annak az osztálynak a neve, amelyben ezeket a módszereket használják.
__JELLEMVONÁS__ A tulajdonság neve. Ez a név tartalmazza annak a névtérnek a nevét, amelyben a tulajdonságot deklarálták (például Foo \\ Bár).
__MÓDSZER__ Az osztály módszer neve.
__NAMESPACE__ Az aktuális névtér neve.
OsztályNév :: osztály Teljes osztályú osztálynév (névtérrel együtt). Lásd még: osztály.

Lásd még get_class (), get_object_vars (), a fájl létezik () és function_exists ().

Változások listája

14 évvel ezelőtt

A különbség
__FUNCTION__ és __METHOD__, mint a PHP 5.0.4-ben, ez az

A FUNCTION__ csak a függvény nevét adja vissza

míg as __METHOD__ az osztály nevét adja vissza a függvény nevével együtt

osztályos trükk
{
függvény doit ()
{
visszhang __FUNKCIÓ__;
}
függvény doitagain ()
{
visszhang __METHOD__;
}
}
$ obj \u003d új trükk ();
$ obj-\u003e doit ();
a kimenet ---- doit lesz
$ obj-\u003e doitagain ();
a kimenet ----- trükk :: doitagain lesz

13 évvel ezelőtt

A __CLASS__ varázsállandó szépen kiegészíti a get_class () függvényt.

Néha ismernie kell mindkettőt:
- az öröklött osztály neve
- a ténylegesen végrehajtott osztály neve

Íme egy példa, amely bemutatja a lehetséges megoldást:

Osztály alap_osztály
{
függvény say_a ()
{

" ;
}

Funkció say_b ()
{

" ;
}

osztály származtatott kiterjeszti az alaposztályt
{
függvény say_a ()
{
szülő :: mondjuk_a ();
visszhang "" a "- mondta a". __OSZTÁLY__. "
" ;
}

Funkció say_b ()
{
szülő :: mondjuk_b ();
visszhang "" b "- mondta a". get_class ($ this). "
" ;
}
}

$ obj_b \u003d új származtatott osztály ();

$ obj_b -\u003e say_a ();
visszhang "
" ;
$ obj_b -\u003e say_b ();

?>

A kimenetnek nagyjából így kell kinéznie:

"a" - mondta az alap_osztály
"a" - mondta a derivált_osztály

"b" - mondta a derivált_osztály
"b" - mondta a derivált_osztály

3 évvel ezelőtt

Megjegyzendő egy kis következetlenség, amikor a __CLASS__ és __METHOD__ tulajdonságokban használják (stand php 7.0.4): Amíg a __CLASS__ hirdetettként működik, és dinamikusan adja vissza annak az osztálynak a nevét, amelyben a tulajdonságot használják, __METHOD__ valójában a tulajdonság nevét fogja megadni osztály név!

8 évvel ezelőtt

Nincs mód a visszamenőleg kompatibilis __DIR__ megvalósítására az 5.3.0 előtti verziókban.

Az egyetlen dolog, amit megtehet, az a, hogy rekurzív keresést hajt végre, és lecseréli a dirname (__ FILE__) fájlra:
megtalálja. -típus f -print0 | xargs -0 sed -i "s / __ DIR __ / dirname (__ FILE __) /"

5 évvel ezelőtt

Sok megjegyzés itt a __DIR__ varázsállandó definiálására vonatkozik a funkciót nem támogató PHP verziókhoz. Természetesen definiálhatja ezt a mágikus állandót azoknak a PHP-verzióknak, amelyek még nem rendelkeznek ezzel az állandóval, de le fogja szüntetni a célját, amint az állandót egy mellékelt fájlban használja, amely lehet egy másik könyvtárban, mint az __DIR__ állandót meghatározó fájl ... Mint ilyen, az állandó elvesztette * varázslatát *, és meglehetősen haszontalan lenne, hacsak nem biztosítja magát arról, hogy az összes tartalma ugyanabban a könyvtárban van.

Következtetés: a szem felzárkózása a gmail dot com-nál arra vonatkozólag érvényes, hogy meg tudja-e definiálni a varázsállandókat, de annak kijelentése, hogy a __DIR__ meghatározása nem haszontalan, nem igaz!

7 évvel ezelőtt

Nem ellenőrizheti, hogy van-e megadva mágikus állandó. Ez azt jelenti, hogy nincs értelme ellenőrizni, hogy a __DIR__ van-e definiálva, majd definiálni. A `define (" __ DIR __ ")` mindig hamis értéket ad vissza. A __DIR__ meghatározása csendben kudarcot vall a PHP 5.3+ verzióban. Ez kompatibilitási problémákat okozhat, ha a szkript más szkripteket is tartalmaz.

echo (meghatározott ("__DIR__")? "" __DIR__ definiálva ":" __DIR__ nincs meghatározva ". PHP_EOL);
echo (define ("__FILE__")? "" __FILE__ definiálva ":" __FILE__ nincs meghatározva ". PHP_EOL);
echo (definiált ("PHP_VERSION")? "A PHP_VERSION definiálva": "A PHP_VERSION nincs meghatározva"). PHP_EOL;
echo "PHP verzió:". PHP_VERSION. PHP_EOL;
?>
Kimenet:
__DIR__ NEM definiált
A __FILE__ NEM definiált
A PHP_VERSION definiálva van
PHP verzió: 5.3.6