PHP тогтмол хүчингүй болгох. PHP дахь тогтмолууд. Тогтмолыг юунд ашигладаг ба хувьсагчийг ашиглахад хялбар биш гэж үү?

Тогтмолууд- эдгээр нь цаг хугацааны явцад өөрчлөгддөггүй үнэт зүйлс юм. Сургуулиасаа ч гэсэн та олон тооны тогтмолыг мэддэг байх, жишээ нь тоо П, тоо д, хурдатгал Чөлөөт уналтмөн бусад. Мэдээжийн хэрэг, програмчлалын явцад оруулах шаардлагатай байдаг тогтмолууд. Мөн хэрхэн талаар PHP дээр тогтмолуудыг үүсгэж ашиглах, бид энэ нийтлэлд энэ тухай ярих болно.

Чамтай хамт явцгаая тогтмолыг үүсгэцгээетоо П:

тодорхойлох(PI, 3.1415926);
цуурай PI;
?>

Оператор тодорхойлохбий болгодог тогтмол П.И.мөн түүнд утга онооно 3.1415926 . Дараа нь бид энэ тогтмолыг оператороор дамжуулан гаргана цуурай. Бүх зүйл маш энгийн, гэхдээ би танд үргэлж дагаж мөрдөхийг зөвлөдөг нэг зөвлөмж байдаг. Заавал бичээрэй тогтмолуудтом үсгээр. Энэ нь зайлшгүй биш, гэхдээ маш их хүсч байна. Мөн энэ нь зөвхөн улсад төдийгүй заншил юм PHP, гэхдээ бусад хэлээр.

Мэдээжийн хэрэг, дараа нь тогтмол өөрчлөлт PI-г зөвшөөрөхгүй (тийм учраас тэр тогтмол).

Одоо шалгадаг нэг функцийг харцгаая: " Өгөгдсөн тогтмолыг тодорхойлсон уу?". Энэ скриптийг бичье:

if (!defined("PI")) define(PI, 3.1415926);
цуурай PI;
?>

Энд тогтмол байгаа эсэхийг шалгана П.И.. Хэрэв энэ нь байхгүй бол (энэ нь define() функцбуцаж ирсэн худлаа), дараа нь бид энэ тогтмолыг эхлүүлнэ. Дараа нь бид үүнийг зүгээр л харуулна.

Таны харж байгаагаар өөрийн PHP дахь тогтмолууд- маш энгийн.

Эцэст нь би ярихыг хүсч байна суулгасан PHP тогтмолууд. Энгийн скрипт бичье:

phpinfo();
?>

Төгсгөлд нь хэсэг байна " PHP хувьсагч"Үнэндээ энэ нь бүхэлдээ биш юм тогтмолуудГэсэн хэдий ч тэд байна тогтмолуудЭнэ скриптийг гүйцэтгэх үед. Мэдээжийн хэрэг, өөр скрипт ажиллахад тэдгээр нь өөр өөр утгатай байх болно (мэдээж бүгд биш). Та хоёрыг хосоороо гаргая тогтмолууд, ингэснээр та тэдэнтэй хэрхэн ажиллахаа ойлгох болно, учир нь тэдгээрийг маш олон удаа ашигладаг:

echo $_SERVER["REMOTE_ADDR"];
цуурай "
";
echo $_SERVER["QUERY_STRING"];
?>

Энэ скрипт дээр бид гаралт хийдэг Хэрэглэгчийн IP хаяг, скриптийг эхлүүлсэн бөгөөд дараагийн мөрөнд бид асуулгын мөрийг харуулна (жишээлбэл, " index.php?id=7"). Жаахан урагшаа харахад бид энд глобал компанитай хамтран ажиллаж байна гэж би хэлж байна $_SERVER массив. Бид дараа нь массивуудтай танилцах болно, гэхдээ бусад програмчлалын хэл дээр массивтай ажиллаж байсан хүмүүс синтаксийг ямар ч асуудалгүйгээр таних болно гэж би бодож байна. Бусдын хувьд тогтмолууд, дараа нь тэдэнтэй хийх ажил ижил аргаар явагдана.

Гүйцэтгэсэн скрипт бүрийн хувьд. Эдгээр тогтмолуудын ихэнх нь янз бүрийн модулиудаар тодорхойлогддог бөгөөд эдгээр модулиудыг динамик ачаалах эсвэл статик угсралтаар ашиглах боломжтой тохиолдолд л байх болно.

Хэрэглэсэн нөхцөл байдлаас шалтгаалан утгыг нь өөрчилдөг ид шидийн есөн тогтмол байдаг. Жишээлбэл, үнэ цэнэ __LINE__Энэ тогтмолыг заасан скрипт дэх мөрөөс хамаарна. Бүх шидэт тогтмолууд нь ажиллах үед шийдэгддэг ердийн тогтмолуудаас ялгаатай нь эмхэтгэх үед шийдэгддэг. Тусгай тогтмолууд нь том жижиг жижиг жижиг хэмжээтэй бөгөөд доор жагсаав.

Зарим ид шидийн PHP тогтмолууд
Нэр Тодорхойлолт
__LINE__ Файл дахь одоогийн мөрийн дугаар.
__ФАЙЛ__ Өргөтгөсөн тэмдэгт холбоос бүхий одоогийн файлын бүтэн зам, нэр. Хэрэв хавсаргасан файл дотор ашигласан бол энэ файлын нэрийг буцаана.
__DIR__ Файлын лавлах. Хэрэв хавсаргасан файл дотор ашигласан бол тухайн файлын лавлахыг буцаана. Энэ нь дуудлага хийхтэй адил юм dirname(__FILE__). Буцаасан лавлах нэр нь үндсэн директороос бусад налуу зураасаар төгсдөггүй.
__FUNCTION__ Функцийн нэр эсвэл (хаалт)нэргүй функцийн хувьд.
__АНГИ__ Ангийн нэр. Энэ нэр нь тухайн анги зарласан нэрийн орон зайн нэрийг агуулна (жишээ нь, Foo\Bar). PHP 5.4 __CLASS__ нь шинж чанарууд дээр бас ажилладаг тул анхаарна уу. Шинж тэмдгийн аргуудад хэрэглэх үед __CLASS__ нь тухайн аргуудыг ашигладаг ангийн нэр юм.
__ШИНЖ ЧАНАР__ Зан чанарын нэр. Энэ нэр нь шинж чанарыг зарласан нэрсийн орон зайг агуулна (жишээлбэл, Foo\Bar).
__АРГААР__ Ангийн аргын нэр.
__NAMESPACE__ Одоогийн нэрийн талбарын нэр.
Ангийн нэр:: анги Бүтэн нэранги (нэрийн орон зайг зааж өгсөн). Мөн :: классыг үзнэ үү.

бас үзнэ үү авах_анги(), get_object_vars(), файл_байгаа()Тэгээд функц_байгаа().

Өөрчлөлтүүдийн жагсаалт

14 жилийн өмнө

Хоорондын ялгаа
PHP 5.0.4 дээрх __FUNCTION__ ба __METHOD__ нь энэ юм.

FUNCTION__ нь зөвхөн функцийн нэрийг буцаана

__METHOD__ нь ангийн нэрийг функцийн нэрийн хамт буцаана

ангийн заль мэх
{
функц doit()
{
echo __FUNCTION__;
}
функц doitagain()
{
echo __METHOD__;
}
}
$obj=шинэ трик();
$obj->doit();
гаралт ---- doit байх болно
$obj->doitagain();
гаралт ----- trick::doitagain байх болно

13 жилийн өмнө

__CLASS__ шидэт тогтмол нь get_class() функцийг маш сайн нөхдөг.

Заримдаа чамд хэрэгтэйхоёуланг нь мэдэхийн тулд:
- өвлөн авсан ангийн нэр
- бодит гүйцэтгэсэн ангийн нэр

Боломжит шийдлийг харуулсан жишээ энд байна:

Ангийн суурь_анги
{
функц say_a()
{

" ;
}

Функц say_b()
{

" ;
}

үүсмэл_анги нь үндсэн_ангиллыг өргөтгөдөг
{
функц say_a()
{
эцэг эх :: хэлэх_a();
echo ""a" гэж " . __АНГИ__. "
" ;
}

Функц say_b()
{
эцэг эх ::say_b();
echo ""b" гэж " . get_class($this) . "
" ;
}
}

$obj_b = new derived_class();

$obj_b -> say_a();
цуурай "
" ;
$obj_b -> say_b();

?>

Гаралт нь ойролцоогоор дараах байдлаар харагдах ёстой.

"а" гэж үндсэн анги хэлэв
"а" гэж үүсмэл_анги хэлэв

"б" гэж үүсмэл_анги хэлэв
"б" гэж үүсмэл_анги хэлэв

3 жилийн өмнө

__CLASS__ болон __METHOD__-г шинж чанарт ашиглах үед бага зэргийн зөрчилтэй байгааг анхаарна уу (php 7.0.4): __CLASS__ нь сурталчилсан байдлаар ажиллаж, тухайн шинж чанарыг ашиглаж буй ангийн нэрийг динамикаар буцаадаг бол __METHOD__ нь шинж чанарын нэрний оронд уг шинж чанарыг урьдчилж бичнэ. ангийн нэр!

8 жилийн өмнө

5.3.0-ээс өмнөх хувилбаруудад ухрах нийцтэй __DIR__-г хэрэгжүүлэх арга байхгүй.

Таны хийж чадах цорын ганц зүйл бол рекурсив хайлт хийж, dirname(__FILE__) руу орлуулах явдал юм:
олох. -төрөл f -print0 | xargs -0 sed -i "s/__DIR__/dirname(__FILE__)/"

5 жилийн өмнө

Энэ функцийг дэмждэггүй PHP хувилбаруудын __DIR__ шидэт тогтмолыг тодорхойлохтой холбоотой олон тэмдэглэл энд байна. Мэдээжийн хэрэг, та энэ тогтмолыг хараахан аваагүй байгаа PHP хувилбаруудын хувьд энэ шидэт тогтмолыг тодорхойлж болно, гэхдээ __DIR__ тогтмолыг тодорхойлсон файлаас өөр директорт байж болох тогтмолыг хавсаргасан файлд ашиглаж эхэлмэгц энэ нь зорилгоо алдах болно. . Иймд тогтмол нь *ид шид*-ээ алдсан бөгөөд хэрэв та өөрийн бүх агуулгыг нэг директорт оруулахгүй бол ашиггүй болно.

Дүгнэлт: gmail dot com-ын шидэт тогтмолуудыг тодорхойлж чадах эсэх талаар бичсэн тэмдэглэл хүчинтэй боловч __DIR__-г тодорхойлох нь дэмий зүйл биш юм!

7 жилийн өмнө

Та шидэт тогтмолыг тодорхойлсон эсэхийг шалгах боломжгүй. Энэ нь __DIR__-г тодорхойлсон эсэхийг шалгаж, дараа нь тодорхойлох нь утгагүй гэсэн үг юм. `defined("__DIR__")` нь үргэлж худал буцаана. __DIR__-г тодорхойлох нь PHP 5.3+ дээр чимээгүйхэн бүтэлгүйтэх болно. Хэрэв таны скрипт өөр скрипт агуулсан бол энэ нь нийцтэй байдлын асуудал үүсгэж болзошгүй.

echo (тодорхойлогдсон ("__DIR__" ) ? "__DIR__ тодорхойлогдсон" : "__DIR__ тодорхойлогдоогүй" . PHP_EOL );
echo (тодорхойлогдсон ("__FILE__" ) ? "__FILE__ тодорхойлогдсон" : "__FILE__ тодорхойлогдоогүй" . PHP_EOL );
echo (тодорхойлогдсон ("PHP_VERSION" ) ? "PHP_VERSION тодорхойлогдсон" : "PHP_VERSION тодорхойлогдоогүй" ) . PHP_EOL;
echo "PHP хувилбар:" . PHP_VERSION. PHP_EOL;
?>
Гаралт:
__DIR__ тодорхойлогдоогүй
__FILE__ тодорхойлогдоогүй
PHP_VERSION тодорхойлогдсон
PHP хувилбар: 5.3.6

Сүүлийн шинэчлэлт: 2015/11/1

Хувьсагчтай адил тогтмолууд нь тодорхой утгыг хадгалдаг боловч хувьсагчдаас ялгаатай нь тогтмолуудын утгыг зөвхөн нэг удаа тохируулах боломжтой бөгөөд дараа нь бид үүнийг өөрчлөх боломжгүй. Жишээлбэл, тоон тогтмолыг тодорхойлъё:

Тогтмолыг тодорхойлохын тулд дараах хэлбэртэй define операторыг ашиглана: define(string $name, string $value, bool $case_sen=false) . $name параметр нь тогтмолын нэрийг, $value параметр нь түүний утгыг илэрхийлдэг. Гурав дахь нэмэлт параметр нь логикийн утгыг авдаг үнэнэсвэл худал. Хэрэв утга нь худал бол тогтмолыг ашиглахдаа түүний тохиолдлыг харгалзан үзэх болно. Манай тохиолдолд гурав дахь параметрийг ашиглаагүй тул анхдагчаар худал байна.

Тогтмолыг тодорхойлсны дараа бид үүнийг ердийн хувьсагчтай адил ашиглаж болно. Цорын ганц үл хамаарах зүйл бол бид түүний үнэ цэнийг өөрчлөх боломжгүй юм. Хувьсагчийн өөр нэг ялгаа нь $ тэмдгийг ашиглах шаардлагагүй юм. Өөрөөр хэлбэл, NUMBER=33 илэрхийлэл; ажиллахгүй.

Урьдчилан тодорхойлсон тогтмолууд

Программист үүсгэсэн тогтмолуудаас гадна РНР-д хэд хэдэн суурилагдсан тогтмолууд байдаг:

    FILE__ : одоогийн файлын бүрэн зам болон нэрийг хадгалдаг

    LINE__ : орчуулагчийн боловсруулж буй одоогийн мөрийн дугаарыг хадгална

    DIR__: одоогийн файлын лавлахыг хадгалдаг

    FUNCTION__ : боловсруулж буй функцийн нэр

    CLASS__ : одоогийн ангийн нэр

    METHOD__ : боловсруулж буй аргын нэр

    NAMESPACE__ : одоогийн нэрийн орон зайн нэр

Жишээлбэл, одоо ажиллаж байгаа мөр болон файлын нэрийг хэвлэ.

Тогтмол байгаа эсэхийг шалгах

Тогтмол тодорхойлогдсон эсэхийг шалгахын тулд бид bool defined(string $name) функцийг ашиглаж болно. Тогтмол $name тодорхойлогдсон бол функц үнэнийг буцаана

Тогтмол нь энгийн утгын тодорхойлогч (нэр) юм. Нэрнээс нь харахад скриптийг гүйцэтгэх явцад тэдгээрийн утга өөрчлөгдөх боломжгүй (үнэндээ тогтмол биш шидэт тогтмолуудаас бусад). Тогтмол нэрс нь өгөгдмөл байдлаар том жижиг жижиг харгалздаг. Уламжлал ёсоор бол тогтмол нэрийг үргэлж том үсгээр бичдэг.

Тогтмол тоонуудын нэр нь РНР хэл дээрх бусад нэрсийн адил нэрлэх дүрмийг дагаж мөрдөх ёстой. Хүчин төгөлдөр нэр нь үсэг эсвэл доогуур зураасаар эхэлж, дараа нь хэдэн ч үсэг, тоо, доогуур зураас орно. Тогтмол илэрхийлэлтогтмол нэрний зөв эсэхийг шалгахын тулд дараах байдлаар харагдана: ^*$

Функц ашиглан тогтмолуудыг тодорхойлох боломжтой тодорхойлох()функцээр дамжуулан утгыг нь (зөвхөн) авах боломжтой хадгалагдсан эсвэл бүр хүчингүй нэрс тогтмол(). Гэсэн хэдий ч үүнийг хийхийг зөвлөдөггүй.

Жишээ №1 Зөв ба буруу тогтмол нэрс

// Тогтмол нэрийг засах
тодорхойлох ("FOO", "ямар нэгэн зүйл");
тодорхойлох ("FOO2", "өөр зүйл");
тодорхойлох ("FOO_BAR" , "ямар нэгэн зүйл" );

// Тогтмол нэрс буруу байна
тодорхойлох ("2FOO", "ямар нэгэн зүйл");

// Энэ бол хүчинтэй мэдэгдэл боловч үүнийг ашиглахгүй байх нь дээр:
// PHP нэг өдөр шидэт тогтмолыг бүртгэж магадгүй,
// энэ нь скриптийг эвдэх болно
тодорхойлох ("__FOO__", "ямар нэгэн зүйл");

?>

Сэтгэгдэл: "Үсэг" гэсэн ойлголт энд байна a-z тэмдэгтүүд, A-Z болон 128-аас 255 хүртэлх ASCII код бүхий бусад тэмдэгтүүд (0x80-0xff).

2 жилийн өмнө

Тогтмолуудын гүйцэтгэл. PHP 7.1.10 32 бит (Opcache идэвхтэй, windows 10 i7-64bits) гэхдээ чиг хандлага нь 5.x-тэй адилхан байгаа бололтой.

DEFINE("CNS",утга)-аар зарласан тогтмолыг ашиглаж байна: 0.63575601577759s
const CNS=утга: 0.61372208595276с зарласан тогтмолыг ашиглаж байна
$v=утга: 0.51184010505676s-ээр зарласан хувьсагчийг ашиглаж байна

Дунджаар DEFINE болон CONST-ийн хэрэглээ нь ойролцоогоор ижил бөгөөд DEFINE-ийн оронд CONST-ийн гүйцэтгэл харьцангуй сайжирдаг. Гэсэн хэдий ч хувьсагч ашиглах нь тогтмолыг ашиглахаас 10-50% илүү сайн байдаг. Тиймээс гүйцэтгэл их шаарддаг ажлын хувьд тогтмол нь хамгийн сайн сонголт биш юм.

$p1=микро цаг(үнэн);
$x=0;
for($i=0;$i<50000000;$i++) {
$x+=CNS;
}
$p2=микро цаг(үнэн);

14 жилийн өмнө

Тодорхойлогдоогүй тогтмолыг зөв ашиглаагүй тохиолдолд үнэн гэж үнэлдэг. Жишээлбэл, танд ийм зүйл байсан гэж хэлээрэй:

settings.php
// Дибаг хийх горим
тодорхойлох ("DEBUG" , худал );
?>

test.php
оруулах("settings.php" );

хэрэв (DEBUG) (
// зарим эмзэг өгөгдлийг цуурайтах.
}
?>

Хэрэв ямар нэг шалтгааны улмаас settings.php-г оруулаагүй бөгөөд DEBUG тогтмолыг тохируулаагүй бол PHP нь эмзэг өгөгдлийг хэвлэх болно. Үүний шийдэл нь үүнийг үнэлэх явдал юм. Үүнтэй адил:

settings.php
// Дибаг хийх горим
тодорхойлох ("DEBUG" , 0 );
?>

test.php
оруулах("settings.php" );

хэрэв (DEBUG == 1 ) (
// зарим эмзэг өгөгдлийг цуурайтах.
}
?>

Одоо энэ нь зөв ажиллаж байна.

Энэ нийтлэлд бид ямар ялгаа байгааг олж мэдэх болно PHP зар const түлхүүр үг болон define() функцийг ашиглан тогтмол.

PHP дахь тогтмолууд нь "тогтмол" бөгөөд утгыг нь зөвхөн нэг удаа зааж өгдөг бөгөөд дараа нь өөрчлөх боломжгүй. Хэрэв та утгыг өөрчлөхийг оролдвол энэ нь өөрчлөгдөхгүй бөгөөд PHP тэмдэглэл гарч ирнэ: "Тогтмол аль хэдийн тодорхойлогдсон":

Тодорхойлох("FOO", "val"); тодорхойлох("FOO", "val2"); // Анхааруулга: Тогтмол аль хэдийн тодорхойлогдсон цуурай FOO; //> вал

PHP дээр тогтмолыг зарлах хоёр арга байдаг:

// 1 тодорхойлох("NAME", "VALUE"); // 2 const NAME = "VALUE";

Арга бүр өөрийн гэсэн онцлогтой тул тэдгээрийг ойлгохын тулд PHP-ийн хувилбар бүрээр хэрхэн, юу өөрчлөгдсөнийг алхам алхмаар харцгаая.

Тогтмолыг хэрхэн бий болгох вэ

PHP 5.3-аас бага

PHP-д 5.3-аас өмнө тогтмолуудыг зөвхөн define() ашиглан тодорхойлж болно. const түлхүүр үг 5.3 хувилбар дээр гарч ирэв.

Зөвхөн скаляр нь тогтмолыг хадгалах боломжтой. Скаляр хувьсагч нь integer, float, string, boolean төрлийн хувьсагч юм. Массив, объект, нөөцийн төрлүүд нь скаляр биш юм.

// скаляр тодорхойлох("FOO", 10); тодорхойлох("FOO", 10.9); тодорхойлох("FOO", "val"); тодорхойлох("FOO", үнэн); // скаляр биш тодорхойлох("FOO", массив(1)); // тогтмолыг тохируулаагүй бөгөөд бид Warning define("FOO", (объект) массив(1)); // тогтмолыг тохируулаагүй бөгөөд бид анхааруулга авдаг

PHP 5.3 хувилбараас

Харагдсан түлхүүр үг const ба одоо үүнийг ашиглан тогтмолыг мөн тодорхойлж болно.

Гэсэн хэдий ч, const-д та хувьсагч, функц эсвэл зарим төрлийн илэрхийлэлийг зааж өгөх боломжгүй, гэхдээ та скалярыг "шууд" дамжуулах ёстой:

Const FOO = "val"; // алдаа байхгүй const FOO = $var; // Шинжилгээний алдаа const FOO = home_url(); // Шинжилгээний алдаа const FOO = 5 + 10; // Шинжилгээний алдаа const FOO = "foo"."bar"; // Шинжилгээний алдаа

Харин define()-д ийм хязгаарлалт байхгүй...

Тодорхойлох("FOO", "val"); // ямар ч алдаа байхгүй("FOO", $var); // ямар ч алдаа тодорхойлохгүй("FOO", home_url()); // алдаа байхгүй("FOO", 5 + 10); // ямар ч алдаа байхгүй("FOO", "foo"."bar"); // алдаа байхгүй

PHP 5.6

PHP-ийн анхдагч илэрхийлэлүүдийг (скалярын илэрхийлэл) const утга болгон зааж өгөх боломжтой болсон:

Const FOO = 1 + 2; const FOO = "foo" . "баар";

Массивыг тогтмол хэмжээнд хадгалах боломжтой болсон:

Const FOO =; // ажил тодорхойлох("FOO", ); // PHP 5.6 дээр ажиллахгүй, PHP 7.0 дээр ажилладаг

Define() болон const хоорондын ялгаа

#1 const-ийг дээд хэсэгт зарлах ёстой

Define()-ээс ялгаатай нь const нь хамрах хүрээний хамгийн дээд хэсэгт зарлагдах ёстой, учир нь тэдгээр нь скриптийг эмхэтгэх үед тодорхойлогддог. Энэ нь тэдгээрийг функц/гогцоо/if хэллэг эсвэл try/catch блок дотор зарлах боломжгүй гэсэн үг юм.

Хэрэв (1) ( const NAME = "VALUE"; // ажиллахгүй ) // хэрэв (1) (тодорхойлох("NAME", "VALUE"); // ажиллана)

№2 const нь үргэлж жижиг жижиг том үсгийг мэдэрдэг

const нь үргэлж том жижиг үсэг мэдэрдэг бол define() нь том жижиг жижиг том үсгээр тогтмол тоо хийх боломжийг олгодог:

Тодорхойлох("NAME", "VALUE", үнэн); цуурай NAME; // VALUE цуурай нэр; // VALUE

#3 const нь зөвхөн скалярыг ойлгодог

Энэ нь зөвхөн PHP 5.6 болон түүнээс доош хувилбаруудад хүчинтэй...

const-г хувьсагч, функц, илэрхийлэлд дамжуулах боломжгүй, харин define() нь:

Const FOO = $var; // Шинжилгээний алдаа const FOO = home_url(); // Шинжилгээний алдаа тодорхойлох("FOO", $var); // ямар ч алдаа тодорхойлохгүй("FOO", home_url()); // алдаа байхгүй

#4 const нь PHP 5.6-аас хойш массивуудыг хадгалж, PHP 7.0-ээс хойш тодорхойлох боломжтой.

const FOO =; // PHP 5.6 дээр ажилладаг define("FOO", ); // PHP 5.6 дээр ажиллахгүй, PHP 7.0 дээр ажилладаг
Харьцуулалтын үр дүн

Тогтмолыг define()-г ашиглан тодорхойлох нь бараг үргэлж илүү сайн байдаг, учир нь алдааг "барьж авах" боломж илүү, цөөн сонголт байдаг... Үл хамаарах зүйл бол танд PHP 5.6 байгаа бөгөөд массивыг тогтмол болгож хадгалах хэрэгтэй. const энд туслах болно.

PHP ангиллын тогтмолууд

Тэдгээрийг зөвхөн const ашиглан зарласан. Тэдгээрийн дүрмүүд нь дээр дурдсанчлан: тэд зөвхөн скалярыг хүлээн зөвшөөрдөг, PHP хувьсагч, функц, илэрхийлэлийг ойлгодоггүй ...

Ангийн тогтмолууд нь үргэлж нийтийн байдаг - хувийн болон хамгаалагдсан статус байхгүй.

Зарлагдсан тогтмол нь тухайн ангид тусгайлан хамаарах бөгөөд энэ нь ямар ч объектод хамаарахгүй бөгөөд тухайн ангийн бүх объектуудад (тохиолдлуудад) нийтлэг байдаг.

Анги Миний_Анги ( const NAME = "VALUE"; // PHP 5.6-аас эхлэн та математик илэрхийллийг ашиглаж болно const SEC_PER_DAY = 60 * 60 * 24; функц print_name() ( // өөрөө дамжуулан арга доторх ангийн тогтмолд хандах (анги өөрөө) ) echo self ::NAME; ) ) // ангиас гадуур тогтмол тоонд хандах хандалтыг // классын жишээг эхлүүлэхгүйгээр глобал хүрээнээс дуудаж болно echo My_Class::NAME;

Ангийн тогтмолууд нь статик ангийн шинж чанаруудтай маш төстэй байдаг.

Анги Миний_Анги ( const NAME = "VALUE"; static $name = "VALUE";; ) echo My_Class::NAME; echo Миний_Анги::$нэр;

"Ид шидийн" тогтмолууд

Эцэст нь хэлэхэд, PHP-ийн тусгай тогтмолуудын талаар санацгаая ...

РНР-д есөн шидэт тогтмол байдаг бөгөөд тэдгээр нь ашигласан контекстээс хамааран утгыг нь өөрчилдөг. Жишээлбэл, __LINE__-ийн утга нь энэ тогтмолыг заасан скрипт дэх мөрөөс хамаарна. Бүх "шидэт" тогтмолууд нь ажиллах үед шийдэгддэг ердийн тогтмолуудаас ялгаатай нь эмхэтгэх үед шийдэгддэг. Тусгай тогтмолууд нь том жижиг жижиг жижиг хэмжээтэй бөгөөд доор жагсаав.

Тогтмол Тодорхойлолт
__LINE__ Файл дахь одоогийн мөрийн дугаар.
__ФАЙЛ__ Тогтмол дуудагдсан одоогийн файлын бүтэн зам ба нэр.
__DIR__ PHP 5.3.0. Тогтмол хэрэглэж буй файлын лавлах. dirname(__FILE__)-тай адил. Үндсэн лавлахаас бусад тохиолдолд арын ташуу зураас байхгүй.
__FUNCTION__ Функцийн нэр.
__АНГИ__ Ангийн нэр. Энэ нэр нь тухайн анги зарласан нэрийн орон зайн нэрийг агуулна (жишээ нь, Foo\Bar). Мөн шинж чанараараа ажилладаг. Шинж тэмдгийн аргуудыг ашиглах үед энэ нь эдгээр аргуудыг ашигладаг ангийн нэр юм.
__ШИНЖ ЧАНАР__ PHP 5.4.0. Зан чанарын нэр. Энэ нэр нь шинж чанарыг зарласан нэрсийн талбайн нэрийг агуулна (жишээ нь, Foo\Bar).
__АРГААР__ Ангийн аргын нэр.
__NAMESPACE__ PHP 5.3.0. Одоогийн нэрийн талбарын нэр.
Ангийн нэр:: анги PHP 5.5.0. Ангийн бүтэн нэр (нэрийн орон зайг оруулаад). Мөн ::class.