Internet Derazalar Android
Kengaytirmoq

PHP global konstantalari. PHP-dagi konstantalar.

(PHP 5\u003e \u003d 5.3.0, php 7)

Ushbu savollar ro'yxati ikki qismga bo'linadi: umumiy tushunish uchun foydali bo'lgan umumiy savollar va amalga oshiriladigan ba'zi xususiyatlar.

Birinchidan, umumiy savollar.

  1. Agar men nomlamalarni ishlatmasam, bularning birortasi muhim deb hisoblanadimi?
  2. Qanday qilib Ichki yoki global sinflarni nomli global sinflardan foydalanishim mumkin?
  3. Qanday qilib men darslardagi darslardan foydalanishim mumkin yoki o'z nomlaridagi konstantsiyalar bormi?
  4. Kabi \\ Mening ismim yoki \\ Ism. o'zgartirildi?
  5. Kabi ism sifatida mening ismim. o'zgartirildi?
  6. Sinfning to'liq nomi qanday ism. o'zgartirildi?
  7. Funktsiyaning to'liq bo'lmagan nomi sifatida yoki doimiy ravishda doimiy bo'lmagan ism sifatida ism. o'zgartirildi?

Tushunish uchun foydali bo'lgan niqoblarning ba'zi tafsilotlari.

  1. Import qilingan nomlar bir xil faylda belgilangan sinflarga zid bo'lolmaydi.
  2. Na funktsiyalar va konteystantsiya operatordan foydalanib deportatsiya qilinishi mumkin emas ishlatmoq.
  3. Dinamik nomli nomlar (tirnoqlarda qabul qilingan identifikatorlar) konferents belgilarini himoya qilishi kerak.
  4. Teskari bo'laklardan foydalanib, aniqlanmagan konstantsiyalarga murojaat qiling, bu mumkin emas. Halokatli xatosi namoyish qilinadi
  5. Null, TREAL, FALSE, ZED_TED_SAFE yoki Zend_debug_build kabi maxsus konstanantlarni bekor qilib bo'lmadi

Agar men nomlamalarni ishlatmasam, bularning birortasi muhim deb hisoblanadimi?

Emas. Nom maydonlar mavjud bo'lgan kodga har qanday shaklda yoki o'z ichiga olgan har qanday yozma kodga ta'sir qilmaydi. Agar xohlasangiz, bunday kod yozishingiz mumkin:

Misol # 1 Nomlar maskanidan tashqarida global sinflarga kirish

$ a \u003d yangi \\ stdocs;
?>

Bu funktsional ravishda quyidagilarga teng:

1-misol Nomlar maskanidan tashqarida global sinflarga kirish

$ a \u003d yangi stdclass;
?>

Qanday qilib Ichki yoki global sinflarni nomli global sinflardan foydalanishim mumkin?

Masalan # 3 Nomlardagi ichki sinflarga kirish

foo foo;
$ a \u003d yangi \\ stdocs;

funktsiya Sinov (\\9999-sonli mablag '\u003d null) ()

$ a \u003d \\ lokerater :: joriy_AS_Filinfo;

// ichki yoki global sinfni kengaytirish
sinf MyException \\ Istissiya ()
?>

Qanday qilib men darslar funktsiyalaridan foydalanishim mumkin, ular o'z nomlari bilan bog'liq bo'lib, o'z nomlaridagi konstantsiyalar?

Ichki sinflar, xususiyatlar yoki nikohlardagi doimiylar

foo foo;

sinf MyLlass ()

// Joriy nomdagi sinfdan foydalanish
funktsiya sinovi (MyClass $ Tilashing $ \u003d Null) ()
// hozirgi nomdagi nomdan darsdan foydalanishning yana bir usuli
funktsiya sinovi (\\ foo \\ myclass $ TodirexExple \u003d NULL) ()

// Joriy nomdagi nomdagi sinfni kengaytirish
sinfni kengaytirish Mening musiqams ()

// global funktsiyaga kirish
$ a \u003d \\ globalfunc ();

// global doimiy ravishda kirish
$ b \u003d \\ ini_all;
?>

Kabi \\ Mening ismim yoki \\ Ism. o'zgartirildi?

Bilan boshlanadigan ismlar \ Har doim ularning ko'rinishini o'zgartiring, men.e. \\ Mening ismim - Haqiqatan ham mening ismim., I. \\ Istissiya - bu Istisno.

Misol # 5 mutlaq ismlar

foo foo;
$ a \u003d yangi \\ mening \\ ismi (); // "mening \\ ismi" sinf namunasini yaratadi
echo \\ Stlen ("Salom"); // "strlen" funktsiyasini keltirib chiqaradi
$ a \u003d \\ INI_all; // o'zgaruvchan $ a Tekshiruv "ISI_ALL" ning qiymati belgilanadi
?>

Kabi ism sifatida mening ismim. o'zgartirildi?

Qarama-qarshi bo'laklarni o'z ichiga olgan ismlar, lekin bu bilan boshlanmang mening ismim.

mening. boshqa ism, keyin bu sinonim qo'llaniladi mening. ichida mening ismim..

mening ismim..

Misol # 6 to'liq ismlar

foo foo;
\\ Bla-dan Foo sifatida foydalaning;

$ a \u003d yangi mening \\ ismi (); // "foo \\ mening ismim" sinf namunasini yaratadi
foo \\ Bar :: ism (); // "nomi" sinfdagi "nomi" statik usulini "" Blah \\ Plah \\ bar "ga olib keladi
mening \\ bar (); // "foo \\ bar" funktsiyasini keltirib chiqaradi
$ a \u003d mening \\ bar; // o'zgaruvchan $ bir doimiy "foo \\ bar" degan ma'noni anglatadi
?>

Sinfning to'liq nomi qanday ism. o'zgartirildi?

Sinf-ismlar, masalan, bu kabi ism. Ikki xil usulda o'zgarishi mumkin.

Agar import ibora bo'lsa, sinonim yaratadi ism. Boshqa ism, keyin bu sinonim ishlatiladi.

Aks holda, nom bo'shlig'ining hozirgi nomi prefiks bo'ladi mening ismim..

Misol # 7 To'liq bo'lmagan sinf nomlari

foo foo;
\\ Bla-dan Foo sifatida foydalaning;

$ a \u003d Yangi ism (); // "foo \\ ismi" sinf namunasini yaratadi
foo :: ismi (); // "Blama \\ Blax" sinfidagi "nomi" statik usulini keltirib chiqaradi
?>

Funktsiyaning to'liq bo'lmagan nomi sifatida yoki doimiy ravishda doimiy bo'lmagan ism sifatida ism. o'zgartirildi?

Ko'rinadigan ahmoqona ismlar yoki konteystantlar, masalan ism. Ikki xil usulda o'zgarishi mumkin.

Birinchidan, nom bo'shlig'ining hozirgi nomi prefiks bo'ladi ism..

Keyin, agar doimiy yoki funktsiya bo'lsa ism. Hozirgi rusumdagi doimiy yoki funktsiyaning amaldagi nomli yoki funktsiyasida mavjud emas ism.Agar mavjud bo'lsa.

Masalan # 8 funktsiyalar yoki doimiy bo'lmagan nomlar

foo foo;
\\ Bla-dan Foo sifatida foydalaning;

konst foo \u003d 1;

mening () funktsiyasi ()
fOO FOO ()
funktsiya Saralash (& $ a)
{
\\ Saralash ($ a); // global funktsiyani "Saralash" ga olib keladi
$ a \u003d Array_flip ($ a);
$ A ni qaytaring;
}

Mening (); // "foo \\ mening" sabablari
$ a \u003d strlen ("Salom"); // global "strlen" funktsiyasini keltirib chiqaradi, chunki "foo \\ stlen" mavjud emas
$ cor \u003d massiv (1, 3, 2);
$ b \u003d nav ($ cent); // Funktsiyani "foo \\ saralash" funktsiyasini chaqiradi
$ C \u003d foo (); // "foo \\ foo" funktsiyasini keltirib chiqaradi - import qo'llanilmaydi

$ a \u003d foo; // doimiy "foo \\ foo" degan ma'noni anglatadi - bu import qo'llanilmaydi
$ b \u003d ini_all; // global doimiy "ISI_ALL" ning eng o'zgaruvchan $ b qiymatini tayinlaydi
?>

Import qilingan nomlar bir xil faylda belgilangan sinflarga zid bo'lolmaydi.

Skriptlarning quyidagi kombinatsiyasi ruxsat etiladi:

mening \\ funtnimedamed;
sinf MyLlass ()
?>

boshqasini nomlash;
sinf ()
?>

mening \\ funtnimedamed;
"File1.php" ni o'z ichiga oladi;
"Anioteroter.ph" ni o'z ichiga oladi;


$ a \u003d yangi mitsins; // "boshqasi" nomidagi "narsa" sinf namunasini yaratadi
?>

Nisbat mojarolar sinfga qaramay ham emas Miyamlass. Nomlar bo'shlig'ida mavjud mening \\ narsalarChunki mitsins ta'rifi alohida faylda. Biroq, quyidagi misolning mojarosi bilan halokatli xatoga olib keladi, chunki MyClass Clasction foydalanish to'g'risidagi bayonot bo'lgan faylda aniqlanadi.

mening \\ funtnimedamed;
melass kabi boshqa narsadan foydalaning;
sinf MyLlass () // Fatal Xato: import so'zlari bilan miyasli mojarolar
$ a \u003d yangi mitsins;
?>

Hunarmandlar yarasi qabul qilinishi mumkin emas.

PHP ni bir-biriga bog'lab qo'yishga ruxsat bermaydi

mening \\ narsalar
XateSoce hattersede (
Sinf foo ()
}
}
?>

Biroq, niqobli naychalarni taqlid qilish uchun:

mening \\ funt \\ hiqiamp \\ hiqi
Sinf foo ()
}
?>

PHP 5.6-ga, na funktsiya va konstantsiya operatordan foydalanib import qilinishi mumkin ishlatmoq.

PHP 5.6 uchun operator harakati o'tkaziladigan yagona elementlarga ishlatmoq - Bular ismlar va sinflarning nomlari. Uzunlikdagi konstantlar yoki funktsiyalarning uzunligini kamaytirish, tarkibini NAZMOKAGA portlash.

menikimni bog'lash;
ultra \\ Uzun \\ ns \\ ismidan foydalaning;

$ A \u003d ism \\ doimiy;
ism \\ func ();
?>

PHPdan boshlab 5.6 dan boshlab funktsiyalar va konstansiyalar nomlari uchun podonymlarni olib kirish va yaratish mumkin bo'ldi.

Dinamik nomli nomlar (tirnoqlarda qabul qilingan identifikatorlar) konferents belgilarini himoya qilishi kerak.

Buni ifodalash juda muhim, chunki teskari qatlami qatorlar ichidagi ekranli belgi sifatida ishlatiladi. Bu satr ichida ishlatilganda har doim takrorlanishi kerak, aks holda bexossiz oqibatlar xavfi paydo bo'ladi:

Ikkita tirnoq ichida ismsimon nomlarni ishlatganda 9 misol

$ a \u003d "Xavfli \\ ism"; // \\ n - bu ikki qatorli tirnoq bilan qator ichidagi yangi liniyaga o'tish!
$ Obj \u003d yangi $ a;

$ \u003d "\\ barchasi \\ HAYoT \\ XAVFSIZLIGIDA"; // Va bu erda hech qanday muammo bo'lmaydi.
$ Obj \u003d yangi $ a;
?>

Yagona tirnoqlarga yopishtirilgan chiziqlar ichida, ajratuvchi sifatida orqaga qaytish xavfsizroq, ammo hanuzgacha barcha qatorlarda teskari ekranni tekshirish amaliyotini tavsiya qilish eng yaxshi variant.

Teskari bo'laklardan foydalanib, aniqlanmagan konstantsiyalarga murojaat qiling, bu mumkin emas. Halokatli xatosi namoyish qilinadi

Har qanday noma'lum doimiy, bu to'liqsiz ism FooPHP buni taklif qilgan xulosaga olib keladi Foo Doimiy ahamiyatga ega edi. Har qanday doimiy, to'liq yoki mutlaq nomi bilan, teskari qatlam belgisi topilmasa, halokatli xatoga olib keladi.

1-misol # 10 noaniqlik

nomlar hajmi;
$ a \u003d foo; // ogohlantirishni ko'rsatadi: aniqlanmagan konstantaklar "foo" deb taxmin qilingan "foo";
$ a \u003d \\ foo; // Fatal xato: aniqlanmagan nom doimiy foo
$ a \u003d bar \\ foo; // Fatal xato: aniqlanmagan nom doimiy satr \\ bar \\ foo
$ a \u003d \\ bar \\ foo; // Fatal Xato: aniqlanmagan nom doimiy bar \\ foo
?>

Null, TREAL, FALSE, ZED_TED_SAFE yoki Zend_debug_build kabi maxsus konstanantlarni bekor qilib bo'lmadi

O'rtacha o'rnatilgan konstantsiyalarning nomlariga to'g'ri keladigan doimiy ravishda doimiy ravishda ochilgan har qanday urinish halokatli xatoga olib keladi.

1-misol # noaniqlik

nomlar hajmi;
const Null \u003d 0; // Jiddiy xato;
const Right \u003d "ahmoq"; // shuningdek, halokatli xato;
// va hokazo.
?>

7 yil oldin.

O'rtacha, o'rnatilgan doimiy, funktsiyani ishlatish va uchinchi parametrli holatni belgilash va uchinchi parametrli holatni belgilash usuli mavjud:

foo foo;
aniqlang (__namespace__. "\\ Null", 10); // hozirgi nomdagi Nomebl-dagi doimiy NOLL ni belgilaydi


?>

Odatda bo'lganingiz kabi, siz () ni EPACE ni spetsifikatsiya qilishning hojati yo'q
foo foo;
aniqlang (INI_ALL, "Bar"); // E'tibor beradi - doimiy ISI_ALL allaqachon aniqlangan. Ammo:

Aniqlang (__namespace__. "\\ INI_all", "Bar"); // hozirgi nomdagi Nomlardagi doimiy ISI_ALL-ni belgilaydi
var_dump (INI_all); // satr (3) "bar" ni ko'rsatadi. Hozirgacha ochilmagan narsa yo'q. Ammo:

Aniqlang ("NULL", 10); // hozirgi nomdagi nomdagi NOLDUL-ni belgilaydi ...
var_dump (NULL); // 10 ni ko'rsatadi
var_dump (NULL); // nullni ko'rsatadi
?>

Agar parametrli holat_INENTIDE TREAD
foo foo;
aniqlang (__namespace__. "\\ Null", 10, rost; // E'tibor beradi - doimiy null allaqachon aniqlangan
?>

3 yil oldin.

Sinflar yaratishda yoki statik usullarni o'zgartirganda, siz o'zgaruvchidan foydalanilganda, siz tegishli sinf uchun tegishli sinf uchun to'liq nom olasiz; Siz bir xil ismsimon ko'rinishda chaqirilsangiz ham, taxallus yoki qisqa ismdan foydalana olmaysiz. Buni hisobga olishni e'tiborsiz qoldirishni mensimaslik sizning kodingizni noto'g'ri sinfdan foydalanishga olib keladi, o'limga olib keladigan sinf istisnolarini yoki xatolarni tashlashga olib keladi.

Bunday hollarda siz sehrli doimiy __namespace__-dan foydalanishingiz mumkin, to'liq nom va sinf nomi to'g'ridan-to'g'ri nomni opection. Class_Exrist funktsiyasi, shuningdek, to'liq nom va sinf nomini talab qiladi va o'limga olib keladigan xatolar yo'qolgan sinflar tufayli tashlanishi mumkinligini ta'minlash uchun ishlatilishi mumkin.

Foo foo;
klass bari (
Jamoat statik funktsiyasi test () () ()
Qaytish get_called_classc ();
}
}

nomSuck Foo \\ Foo;
sinf paneli \\ foo \\ barni kengaytiradi (
}

Var_Dump (Bar :: test ()); // satr (11) "foo \\ foo \\ bar"

$ Bar \u003d "foo \\ bar";
var_dump ($ bar :: test ()); // satr (7) "foo \\ bar"

$ Bar \u003d __nameber__. "\\ Bar";
var_dump ($ bar :: test ()); // satr (11) "foo \\ foo \\ bar"

$ Bar \u003d "bar";
var_dump ($ bar :: test ()); // Fatal Xato: "Bar" sinfi topilmadi yoki noto'g'ri klass \\ bar

Har bir bajariladigan ssenariy uchun. Ushbu konstansiyalarning aksariyati turli modullar bilan belgilanadi va agar ushbu modullar dinamik yuk yoki statik yig'ilish natijasida mavjud bo'lsa, mavjud bo'ladi.

Ular ishlatilgan kontekstga qarab ularning qiymatini o'zgartiradigan to'qqiz sehrli konstantsiya mavjud. Masalan, qiymati __Line__ Ushbu doimiy ko'rsatilgan skriptdagi qatorga bog'liq. Yig'ish paytida barcha sehrli konstantsiyalar ijro etish paytida ruxsat etilgan an'anaviy konstitutsiyalardan farqli o'laroq ruxsat etiladi. Maxsus konstantalar reestrga beparvolik va ularning ro'yxatida ko'rsatilgan:

Ba'zi sehrli PHP konstantalari
Ism Tavsif
__Line__ Fayldagi joriy qator raqami.
__File__ Joriy simlinks bilan mavjud faylning to'liq yo'l va nomi. Agar plagin faylida ishlatilsa, unda ushbu faylning nomi qaytariladi.
__Dir__ Fayl katalogi. Agar plagin faylida ishlatilsa, ushbu faylning katalogi qaytariladi. Bu qo'ng'iroqqa teng dername (__ fayl). Katalogning qaytish nomi yotgan holda, ildiz katalogi bundan mustasno.
__Fxt__ Funktsiya nomi yoki (Yopilish) Agar noma'lum funktsiya bo'lsa.
__Class__ Sinf nomi. Bu nomda sinf e'lon qilingan nomsorning nomi mavjud (masalan, Foo \\ bar.). E'tibor bering, PHP 5.4 __Class__ bilan boshlash, shuningdek, xususiyatlarda ishlaydi. Belgilar usulida ishlatilganda __class__ bu usullardan foydalaniladigan sinfning nomi.
__TRAIT__ Fazilatning nomi. Bu nomda belgilar e'lon qilingan nomsorning nomi mavjud (masalan, Foo \\ bar.).
__Metrod__ Sinf usulining nomi.
__Namespac____ Hozirgi nomsameburaning nomi.
Klassname :: klass To'liq sinf nomi (nom bo'shlig'i). Shuningdek qarang :: klass..

Shuningdek qarang get_class () , get_obje_vares () , fayl_existlar () va funktsiya_existlar () .

O'zgarishlar ro'yxati

14 yil oldin.

O'rtasidagi farq.
__Fxt__ va __metod__ PHP 5.0.4

Funktsiya__ faqat funktsiyaning nomini qaytaradi

__Metrod__ sinfning nomini bir qatorda sinfning nomini qaytaradi

sinf hiylasi.
{
Funktsiya ()
{
echo ____;
}
Vazifa Daitagine ()
{
Echo __metodi__;
}
}
$ Obj \u003d yangi hiyla ();
$ @J-\u003e Talab ();
chiqish ---- bajariladi
$ Obj-\u003e doitaagin ();
chiqish ------hiyla-nayrang :: dowagine

13 yil oldin.

__Class____ sehrli doimiy ravishda get_class () funktsiyasini yaxshilaydi.

Ba'zan ikkalasini ham bilishingiz kerak:
- meros qilib olingan sinfning ismi
- Sinfning nomi aslida bajarildi

Bu erda mumkin bo'lgan qarorni ko'rsatadigan misol:

Sinf bazasi_clas.
{
Funktsiya Say_a ()
{

" ;
}

Funktsiya Sayt_b ()
{

" ;
}

sinf ekspertizasi_clasce bazasi_classni kengaytiradi
{
Funktsiya Say_a ()
{
ota-ona :: Say_a ();
"" A "- dedi" A "- dedi. __Class__. "
" ;
}

Funktsiya Sayt_b ()
{
ota-ona :: Say_B ();
Echo "B" - dedi ". get_class ($ bu). "
" ;
}
}

$ ObJ_B \u003d Yangi Gered_Class ();

$ ObJ_B -\u003e Say_a ();
aks sado '
" ;
$ ObJ_B -\u003e Say_B ();

?>

Chiqish Shll shu kabi ko'rinadi:

"A" - dedi asos_class
"A" - dedi Gered_Class

"B" - dedi Gered_Class
"B" - dedi Gered_Class

3 yil oldin.

__Clas__ va __metrod__-dan foydalanishda kichik bir nomuvofiqlik (php 7.0.4). Klassning nomi reklama paytida, belgilar aslida uning o'rniga belgilar nomini tayyorlaydi Sinf nomi!

8 yil oldin.

5.3.0 dan oldin versiyalarda rozilik masofani bosib o'tishning iloji yo'q.

Siz qila oladigan yagona narsa - rekurvid qidiruvni amalga oshirish va DirName (__ fayllari) raqamiga almashtirish.
toping. -YPE F-Sprint0 | Xargs -0 sdor -i 's / __ __ / dirname (__ fayl __) / "

5 yil oldin.

Bu erda PHP versiyalari uchun __da__ sehrgarligini aniqlash bo'yicha ko'plab eslatmalar xususiyatni qo'llab-quvvatlamay turib. Albatta, siz hozirda bunday katalogda bo'lgan PHP versiyalari uchun ushbu sehrli doimiylar uchun siz ushbu sehrgarlikni aniqlaysiz, ammo u boshqa katalogda doimiy ravishda foydalanishni, u boshqa katalogda bo'lishi mumkin, ular boshqa katalogda bo'lishi mumkin. Doimiy. Shunday qilib, doimiy sehrni yo'qotdi *, agar siz ushbu katalogda o'zingiz bo'lishingizga ishontira olmasangiz, o'zingizni ishontira olmasangiz, juda foydasiz bo'ladi.

Xulosa: Sehrli konstantalarni aniqlay olmasangiz, gmail dot comma-da ko'z ushlashi to'g'ri, ammo __dan__ ta'rifi bexabar emasligini ko'rsatib bo'lmaydi!

7 yil oldin.

Sehrli doimiy aniqlanganligini tekshira olmaysiz. Bu degani, __Dir__ aniqlanganligini tekshirishning ma'nosi yo'q. - aniqlangan ("__ dr __") "har doim yolg'onni qaytaradi. Shaklni aniqlash 1 php 5.3+ da jimgina muvaffaqiyatsiz bo'ladi. Agar sizning skriptingiz boshqa skriptlarni o'z ichiga olsa, bu moslik muammolarini keltirib chiqarishi mumkin.

aks sado ("__Dir__")? "__Dir__ aniqlanadi": "__Dir__ aniqlanmagan." Php_eol ";
aks sado ("__file__")? "__File__ aniqlanadi": "__file__ aniqlanmaydi." Php_eol ";
echo (aniqlangan ("php_version")? "Php_Vversiya aniqlanadi": "Php_Vversie" deb ta'riflanmagan). Php_eol;
echo "PHP versiyasi:". Php_version. Php_eol;
?>
Chiqish:
__Dir__ aniqlanmagan
__File__ aniqlanmagan
Php_versiya aniqlanadi.
PHP versiyasi: 5.3.6

Dastur davomida o'zgarmaydigan doimiy saqlash uchun har qanday aniq qiymatlardan foydalanish uchun o'zgaruvchilar mavjud bo'lgan holatlar mavjud. Ushbu qadriyatlar matematik konstantalar, fayllar, turli xil parollar va boshqalar bo'lishi mumkin. Ushbu maqsadlar uchun PHPda bunday dizayn mavjud.

dastur ijrosi davomida o'zgarmaydigan deb nomlangan qiymat (skript).

RNR-konstantsiya funktsiya bilan belgilanadi aniqlang () . Ushbu xususiyat quyidagi formatda:

aniqlang. ($ Ism., $ qiymati, $_sen.), Bu erda:

$ Ism. - doimiyning nomi;
$ qiymati - doimiy qiymat;
$_sen. - mantiqiy turdagi ixtiyoriy parametr,
Harflar (haqiqiy) yoki yo'qmi yoki yo'qmi yoki yo'qmi, deb hisoblash kerak.

PHP konstanstantini aniqlash va undan foydalanishning misoli:


echo pi;
// 3.14 displeyda.
?>

Agar parametr bo'lsa $_sen. Qarg'a to'g'ri.Tarjimon doimiy bilan ishlashda ramzli registrni hisobga oladi. E'tibor bering, konstantsiya oldingi belgisiz ishlatilgan. $ .

Konstantalar va o'zgaruvchilar o'rtasidagi farqlar:

    Dollar belgisi shaklida doimiy konsol yo'q ( $ );

    Konstantalar faqat funktsiyadan foydalanib aniqlanishi mumkin aniqlang () va qiymatni belgilamaslik;

    Konstantalarni har qanday joyda hisobga olmagan holda aniqlanishi va mavjud bo'lishi mumkin;

    Dastlabki reklamadan keyin konstantalarni aniqlab bo'lmaydi yoki bekor qilib bo'lmaydi;

    Konstantalar faqat Scalar qiymatlari bo'lishi mumkin.

Konstitutsiya mavjudligini tekshirish

Doimiy holatning mavjudligini tekshirish uchun funktsiyadan foydalanishingiz mumkin aniqlangan () . Ushbu xususiyat qaytadi to'g'ri.Agar doimiy ravishda doimiy bo'lsa. Keling, misol keltiraylik:

// pi doimiyligini e'lon qiling
aniqlang ("pi", 3.14, to'g'ri);
agar (aniqlangan ("pi") \u003d\u003d rost) echo "PI doimiy deb e'lon qilindi!";
// Skriptda "PI doimiy deb e'lon qilinadi!"
?>

Oldindan belgilangan PHP konstantalari

PHP-da quyidagi oldindan belgilangan konstantsiya mavjud:

PHP har bir bajariladigan skript uchun oldindan belgilangan konstantalarning katta ro'yxatini taqdim etadi. Ushbu konstansiyalarning aksariyati turli modullar bilan belgilanadi va agar ushbu modullar dinamik yuk yoki statik yig'ilish natijasida mavjud bo'lsa, mavjud bo'ladi.

Ular ishlatilgan kontekstga qarab ularning qiymatini o'zgartiradigan beshta oldindan belgilangan konstantsiya mavjud. Masalan, Konstanta __Line__ Ushbu doimiy ko'rsatilgan skriptdagi qatorga bog'liq. Maxsus konstantalar reestrga beparvolik va ularning ro'yxatida ko'rsatilgan:

Ism Tavsif
__Line__ Fayldagi joriy chiziq.
__File__ To'liq yo'l va joriy faylning nomi.
__Dir__ Fayl katalogi. Agar ishlatilgan bo'lsa, kiritilgan faylning katalogi qaytariladi. Bu drname (__ fayllari) ga teng. Ushbu katalog nomi - bu ildiz katalogi bo'lmasa, an'anaga ega emas.
__Fxt__ Funktsiya nomi. (PHP 4.3.0 ga qo'shildi.)
__Class__ Sinf nomi. (PHP 4.3.0 ga qo'shildi.)
__TRAIT__ Belgilangan nomi. Taayt nomini o'z ichiga oladi (E.G. foo \\ bar) da e'lon qilingan.
__Metrod__ Sinf usulining nomi. (PHP 5.0.0 ga qo'shildi)
__Namespac____ Hozirgi nomsameburaning nomi.

Qo'shimcha ravishda

So'nggi yangilangan: 1.11.2015

Konstantalar, shuningdek o'zgaruvchilar ma'lum bir qiymatni saqlaydilar, faqat o'zgaruvchilar pardani taqqoslashda faqat bir marta o'rnatilishi mumkin, keyin endi uni o'zgartira olmaymiz. Masalan, biz sonli doimiy farqni aniqlaymiz:

Doimiy ravishda, aniqlangan operator quyidagi shaklga ega: belgilanadi: $ ism, $ qancha miqdordagi string, COOOL $ \u003d noto'g'ri). Ism parametrining doimiy nomini uzatadi va $ qiymat parametri uning qiymati. Uchinchi ixtiyoriy parametr mantiqiy qiymatni to'g'ri yoki yolg'onga oladi. Agar qiymati noto'g'ri bo'lsa, unda doimiy ravishda doimiy bo'lsa, agar u rost bo'lsa, uning registrini hisobga olishda amalga oshiriladi - Ro'yxatdan o'tish hisobga olinmaydi. Bizning holatda, uchinchi parametr ishlatilmaydi, shuning uchun u sukut bo'yicha yolg'onga teng.

Doimiylikni aniqlaganingizdan so'ng, biz undan, shuningdek odatiy o'zgaruvchandan foydalanishimiz mumkin. Faqat istisno - biz uning ma'nosini o'zgartira olmaymiz. O'zgaruvchining yana bir farq $ belgidan foydalanmaslikdir. Ya'ni, ifoda raqami \u003d 33; Bu ishlamaydi.

Oldindan belgilangan konstantalar

Dasturchi tomonidan yaratilgan dasturchiga qo'shimcha ravishda PHPda yana bir nechta o'rnatilgan konstantalar mavjud:

    Fayl__: Joriy faylning to'liq yo'lini va ismini saqlaydi

    Line__: Tarmoqli jarayonlar jadvalini saqlaydi

    DATR__: Joriy fayl katalogini saqlaydi

    Funktsiya__: Ishlab chiqarilgan funktsiyaning nomi

    CLASS__: Joriy sinfning nomi

    1-usul: Qayta ishlangan usulning nomi

    NomePace__: Hozirgi nomli nom

Masalan, joriy bajariladigan satr va fayl nomini oling:

Konstantura mavjudligini tekshirish

Kontstanturlar aniqlanganligini tekshirish uchun, biz aniqlangan Boin ($ ismingiz) funktsiyasidan foydalanishimiz mumkin. Agar $ ismingiz aniqlanadi, funktsiya haqiqatga qaytadi