Хичээлээр бид PHP хэлний үндсэн ойлголтууд болох хувьсагч, тогтмолуудын талаар авч үзнэ. Эдгээрийг сайн ойлгохгүйгээр програм бичнэ гэдэг хүндрэлтэй. Та ямар нэгэн програмчлалын хэл мэддэг гэсэн ч энэ хичээлийг үзээрэй. Учир нь PHP хэлэнд өгөгдөлтэй ажиллах онцлогууд байдаг.
Хувьсагч
Програмчлалын ямарч хэлэнд програмын ажиллагааны явцад өөрчлөгдөж байдаг өгөгдлийг хадгалах хэрэгсэл байдаг. Эдгээр нь хувьсагчид юм. Хувьсагч нь нэр болон утгаар тодорхойлогдоно.
Хувьсагч - өгөгдөл хадгалах хэрэгсэл.
Хувьсагчийн тухай илүү сайн ойлгохын тулд жишээ авч үзье.
<?php
$number=5; // хувьсагчид 5 гэсэн утга олгож байна.
$number=2*$number; // $number хувьсагчийн утгыг 2 үржүүлнэ
echo $number; // $number хувьсагчийн утгыг үзүүлнэ
?>
Жишээнд $number нэртэй хувьсагчид (=) тэмдгийг ашиглан 5 гэсэн утгыг олгосон байна. Хувьсагч нь утга хадгалаад зогсохгүй тэдгээрийг өөрчилж болно. Хоёрдугаар мөрөнд $number хувьсагчийн утгыг хоёр дахин өсгөж байна. Хувьсагчийн утгыг үзүүлэхдээ түүнийг нэрийг ашиглаж байна.
PHP –д хувьсагчийн нэрийг өгөхдөө дараах дүрмийг баримтлах хэрэгтэй.
- Ямарч хувьсагчийн нэр ($) долларын тэмдэгээр эхлэх ёстой
- Түүний араас доогуур зураас (_) эсвэл үсэг байна. Тоо байж болохгүй.
- Дараа нь үсэг, тоо, доогуур зураас байж болно. Харин хоосон зай (space) хувьсагчийн нэрэнд байж болохгүй
- Хувьсагчийн нэр нь том жижиг үсгийг ялгана. Жишээ нь $number ба $Number хоёрыг нэг ижил хувьсагч гэж үзэхгүй.
<?php
$2_var=5; // буруу нэртэй хувьсагч
$_2_var=2; // энэ бол зөв нэртэй хувьсагч
$color; // өнгө заасан хувьсагч
$user_id; // хэрэглэгчийн кодыг заасан хувьсагч
?>
Ихэнх програм зохиогчид баримталдаг PHP Coding Standard гэдэг дүрэм байдаг. Энэ дүрмээр хувьсагчийн нэрийг жижиг үсгээр бичиж үгийг доогуур зураасаар тасалдаг. Дээрх жишээний сүүлийн хоёр мөрийг хар. Хувьсагчийн нэрээр түүнд хадгалагдаж байгаа өгөгдлийг мэдэж болохоор өгөх нь их хэмжээний хувьсагч ашигласан програм зохиоход хэрэгтэй байдаг. Гэхдээ хэт их урт нэр өгөх нь ажиллагааг хүндрүүлдэг гэдгийг санаарай.
Өгөгдлийн төрлүүд
PHP –д дөрвөн (Integer, Double, Boolean, String) энгийн, хоёр (Array, Object) холимог төрлүүд байдаг.
Integer
Энэ төрөл нь хэмжээний хувьд хязгаарлагдсан бүхэл тоон олонлогоор тодорхойлогдоно. Жишээ нь 32 битийн платформын хувьд энэ олонлог нь -2,147,482,648 аас 2,147,482,647 хооронд байдаг. Integer төрлийн өгөгдлүүд 16, 10, 8 гээд төрөл бүрийн тоон системээр бичигдэж болно. Жишээ нь
<?php
// Доорх гурван тоо нь аравтын системээр 347
$oct_int_number=0475; // наймтын системийн тоо 0 эхэлнэ
$dec_int_number=347; // энэ бол аравтын систем
$hex_int_number=0X130; // 16 системийн тоо 0Х эхэлнэ
?>
Double
Double (эсвэл Float) төрөл нь бодит тоон олонлогт харьяалагдана. Өөрөөр хэлбэл өндөр нарийвчлалтай бутархай тоонууд юм. Энэ төрлийн хувьсагчийг том тоонууд болон өндөр нарийвчлалтай тооцоонд ихэвчлэн ашигладаг. Жишээ нь
<?php
$first_dbl_number=111.99;
$sec_dbl_number=4.5e3; // энэ бол 4500
$trd_dbl_number=5E-5; // энэ бол 0.00005
?>
Boolean
Хамгийн энгийн өгөгдлийн төрөл нь Boolean юм. Учир нь энэ төрөл нь үнэн (True), худал (False) гэсэн хоёрхон утгатай байдаг. Энэ төрлийг аливаа утгыг үнэн худал гэдгийг шалгахад голдуу ашигладаг. FALSE, TRUE утга нь том жижиг бичлэгийг ялгадаггүй тул false, true гэж бичиж болно.
String
PHP –д String төрөл нь тэмдэгтийн мөрөнд хамаарах бөгөөд уртын хэмжээ нь бараг хязгааргүй байдаг. Энэ төрлийн талаар Мөр хичээлд дэлгэрэнгүй үзэх болно. Жишээ нь
<?php
$string="Hello, World!";
$null_string=""; // энэ бол хоосон мөр
?>
Array төрлийн талаар Массив хичээлд үзэх бөгөөд Object төрлийг обьект хандалттай програмчлалд хэрэглэдэг. Эдгээрээс гадна PHP нь (resource, NULL) гэсэн 2 тусгай төрөл болон (mixed, number, callback) гэсэн дундын төрлүүдийг дэмждэг. Эдгээр төрлүүд нь практикт бараг ашиглагддаггүй тул бид хичээлүүдээр эдгээрийн талаар үзэхгүй.
Хувьсагчийг тодорхойлох
Delphi, Pascal зэрэг програмчлалын олон хэлэнд хувьсагчийг урьдчилан ямар төрөлд хамаарахыг заавал зарладаг. Програмд уг хувьсагчид тохирохгүй утга олгоход алдаа гардаг. Энэ тал дээр PHP нь илүү зөөлөн. Энд хувьсагчийг зарлахдаа ямар төрлийнх болохыг заах албагүй. Програмд хувьсагчид утга олгоход төрлийг автоматаар тохируулан өөрчилдөг. Үүнээс гадна програмд нэг хувьсагчид олон төрлийн өгөгдлийг дараалуулан хадгалаж болдог. Энэ чөлөөтэй байдал нь програм зохиогчоос хувьсагчийн төрлийн хяналтыг нарийн болгохыг шаарддаг. Хувьсагчийн төрлийг gettype() функцээр мэддэг. Функцын талаар Функцууд хичээлээс үзээрэй.
PHP -д хувьсагчийн төрөл хэрхэн өөрчлөгдөхийг жишээгээр авч үзье.
<HTML>
<HEAD>
<TITLE>Хувьсагчийн төрлийг өөрчлөх</TITLE>
</HEAD>
<BODY>
<?php
$test_var=12.63; // 12.63 утгыг олголлоо
echo gettype($test_var); // double гэж гарна
echo "<br>";
echo $test_var; // 12.63 гэж гарна
echo "<br>";
settype($test_var, string); // хувьсагчийг string төрөл болгоно
echo gettype($test_var); // string гэж гарна
echo "<br>";
echo $test_var; // 12.63 гэж гарна
echo "<br>";
settype($test_var, integer); // хувьсагчийг integer төрөл болгоно
echo gettype($test_var); // integer гэж гарна
echo "<br>";
echo $test_var; // 12 гэж гарна
echo "<br>";
settype($test_var, boolean); // хувьсагчийг boolean төрөл болгоно
echo gettype($test_var); // boolean гэж гарна
echo "<br>";
echo $test_var; // 1 гэж гарна
echo "<br>";
$test_var="num10";
settype($test_var, integer); // хувьсагчийг integer төрөл болгоно
echo $test_var; // 0 гэж гарна
echo "<br>";
$test_var="10num";
settype($test_var, integer); // хувьсагчийг integer төрөл болгоно
echo $test_var; // 10 гэж гарна
?>
</BODY>
</HTML>
Энд settype() функц нь хувьсагчийн төрлийг өөрчилнө. Харин gettype() функц нь хувьсагчийн төрлийг авчирна. Жишээнээс хувьсагчийн төрөл нь тодорхой дүрмээр өөрчлөгдөж байгааг харж болно. Жишээг өөрсдөө туршин ажиллуулаарай. Энэ дүрэмээс заримыг нь дурдвал
Boolean төрөлд шилжихдээ
- Тэг (0) бүхэл тоо FALSE болно
- (0.0) бутархай тоо FALSE болно
- Хоосон мөр эсвэл "0" мөр FALSE болно
- Бусад бүх утгууд TRUE болно
Integer төрөлд шилжихдээ
- FALSE – 0 харин TRUE -1 болно
- Бодит тооны бутархай хэсэг нь орхигдон бүхэл тоо болно. /Жишээг хар/
- Хэрвээ мөр нь тоогоор эхлээгүй бол 0, эсрэг тохиолдолд тухайн тоо болно. /Жишээг хар/
String төрөлд шилжихдээ
- FALSE – хоосон мөр харин TRUE -"1" болно
- Дурын тоо нь тэр хэвээрээ мөр болно
Хувьсагчийг холбох
PHP –д холбоос гэсэн ойлголт байдаг. Үүнийг ойлгохын тулд жишээ авч үзье.
<HTML>
<HEAD>
<TITLE>Хувьсагчид холбоос тогтоох</TITLE>
</HEAD>
<BODY>
<?php
$a=1; // $a хувьсагчид 1 гэсэн утга олголлоо
$b=$a; // $a-гийн утгыг $b –д олгох
$c=&$a; // $c-г $a –тай холбох
$a=5; // $a хувьсагчид 5 гэсэн утга олголлоо
echo $a; // 5 гэж гарна
echo "<br>";
echo $b; // 1 гэж гарна
echo "<br>";
echo $c; // 5 гэж гарна
?>
</BODY>
</HTML>
Жишээнд бид эхлээд $a хувьсагчид 1 гэсэн утга олгоод дараа нь $b хувьсагчид $a хувьсагчийн утгыг олгосон. Одоо $a ,$b хувьсагчдын утга ижилхэн. Гэхдээ эдгээр хувьсагчдын аль нэгний утгыг өөрчилөхөд нөгөөгийнхөө утганд ямарч нөлөө үзүүлэхгүй. Харин & тэмдэгтээр бид $c хувьсагчийг $a хувьсагчтай холбон өгч байна. Одоо эдгээр хувьсагчдын утга үргэлж ижилхэн байх болно. Аль нэг хувьсагчийн утгыг өөрчлөхөд нөгөө хувьсагчийн утга даган өөрчлөгдөнө.
Динамик хувьсагч
PHP –д хувьсагчийн нэр нь хувьсагч агуулж байдаг хувьсагчийг ашиглаж болдог. Үүнийг шууд ойлгоход хүндрэлтэй тул жишээгээр авч үзье.
<HTML>
<HEAD>
<TITLE>Динамик хувьсагч</TITLE>
</HEAD>
<BODY>
<?php
$name="id"; // $name хувьсагч id гэсэн утгатай
$id=5; // $id-гийн утга нь 5
echo $$name; // 5 гэж гарна
?>
</BODY>
</HTML>
$$name төрлийн хувьсагчдыг динамик хувьсагч гэдэг. Програмын явцад олон тооны хувьсагч үүсгэх хэрэгтэй үед ийм хувьсагчдыг голдуу ашигладаг. Жишээ авч үзье.
<HTML>
<HEAD>
<TITLE>Динамик хувьсагчийг ашиглах арга</TITLE>
</HEAD>
<BODY>
<?php
$name="age";
$age=18;
echo "<b>$$name</b><br>"; // $age гэж гарна
echo "<b>${$name}</b><br>"; // 18 гэж гарна
echo "<b>${age}</b>"; // 18 гэж гарна
?>
</BODY>
</HTML>
Энд динамик хувьсагчийг гаргах бас нэг аргыг үзүүлсэн. Хэрвээ хувьсагч хашилтанд байгаа тохиолдолд ( {} ) их хаалтыг ашиглах хэрэгтэй. Эс тэгвээс $age гэж гарч ирнэ.
Тогтмолууд
Ямар нэгэн утгыг тэмдэглээд бүх програмын туршид ашиглаж болно. Эдгээрийг PHP -д тогтмол утгууд гэдэг.
Тогтмол гэдэг нь өөрчлөгдөхгүй утга юм.
PHP -д тогтмол утгыг тодорхойлохдоо define() функцыг ашиглана. Бичлэгийн дүрэм нь
define(<Тогтмолын нэр> , <утга>);
Жишээ нь
<HTML>
<HEAD>
<TITLE>Тогтмолыг тодорхойлох</TITLE>
</HEAD>
<BODY>
<?php
define("ADMIN_NAME","Дорж");
define("NUMBER_E", 2.71828);
echo ADMIN_NAME;
echo "<br>";
echo NUMBER_E *2;
?>
</BODY>
</HTML>
Тогтмолоор мөр, тоо, бүхэл тоо, логик утга тодорхойлж болохоос гадна тэдгээрийг үйлдэлд ашиглаж болно. Тогтмолын нэрэнд жижиг том үсгийн алийг ч ашиглаж болдог. Гэхдээ жишээнд бид тогтмолын нэрийг ADMIN_NAME, NUMBER_E гэж өгсөн байгааг анхаар. Энэ нь бид PHP Coding Standard дүрмийг баримталж байгааг илтгэнэ. Дүрмээр тогтмолын нэрийг том үсгээр үгийг хооронд нь доогуур зураасаар зааглаж өгдөг. Тогмолын нэр нь том жижиг үсгийг ялгана. Жишээ нь ADMIN_NAME ба ADMIN_name гэсэн тогтмолууд ижил биш. Тогтмолыг зарласны дараа програмын код дотор утгыг өөрчилж болдоггүй. Жишээ нь
<?php
define("CONSTANT",5);
CONSTANT=2;
?>
програмын кодыг ажиллуулахад алдаа гарна. PHP –д өөрийн тогтмолууд байдаг. Тогтмолын нэрийг өгөхдөө эдгээртэй нэрийг давхардуулан өгөхөөс болгоомжлох хэрэгтэй. Ямар нэгэн тогтмол байгаа эсэхийг defined() функцээр мэдэж болно. Тогтмолын нэрийг функцын параметр болгон өгөхөд функц 1 утга буцаавал тогтмол тодорхойлогдсон эсрэг тохиолдолд 0 утгыг буцаадаг.
Урьдчилан тодорхойлогдсон тогтмолууд
PHP –д өөрийн тогтмолууд байдаг. Эдгээрийг урьдчилан тодорхойлогдсон тогтмолууд гэдэг ба гол зориулалт нь системийн мэдээллийг хадгалах байдаг. Жишээ нь PHP_VERSION ба PHP_OS нь PHP –н хувилбар болон серверийн үйлдлийн системийн нэрийг агуулна.
Үүнээс гадна хэрэглэгээнээс хамаарч утга нь өөрчлөгдаж байдаг хэсэг тогтмолууд байдаг. Жишээ нь __LINE__ , __FILE__ тогтмолууд нь мөрийн дугаар, файлын нэрийг агуулдаг. Эдгээр тогтмолын нэрийг том жижиг аль ч байдлаар бичиж болдог. Жишээн дээр авч үзье.
<HTML>
<HEAD>
<TITLE>Урьдчилан тодорхойлогдсон тогтмолууд</TITLE>
</HEAD>
<BODY>
<?php
echo "PHP хувилбар :";
echo PHP_VERSION;
echo "<br>";
echo "Үйлдлийн систем :";
echo PHP_OS;
echo "<br>";
echo "Мөрийн дугаар :";
echo __LINE__;
echo "<br>";
echo "Ажиллаж байгаа файл :";
echo __file__;
?>
</BODY>
</HTML>