1-bo‘lim
PHP bilan tanishuv
PHP ni kim va nima uchun yaratgan, u qanday ishlaydi, JavaScript dan farqi va nima uchun bugun ham eng keng tarqalgan server tili.
Ushbu bo‘lim mundarijasi
Brauzerda ko'rgan sahifangiz kimdir tomonidan yozib berilgan bo'lishi kerak. PHP aynan shu ish bilan shug'ullanadi: u serverda ishlaydi va brauzerga tayyor HTML yuboradi.
PHP ni kim yaratgan? #
Rasmus Lerdorf (1968-)
PHP ning asoschisi. Daniya-Kanada dasturchisi. 1994-yilda u shunchaki o'z shaxsiy sahifasiga tashrif buyurganlarni sanash uchun kichik vositalar to'plamini yozdi va uni "Personal Home Page Tools" deb atadi.
U til yaratmoqchi emas edi. Keyinchalik o'zi shunday degan: "Men hech qachon dasturlash tili yozishni rejalashtirmaganman - qanday qilib yozishni ham bilmasdim".
| Yil | Nomi | Ma'nosi |
|---|---|---|
| 1994 | PHP Tools | Personal Home Page Tools |
| 1995 | PHP/FI | Personal Home Page / Forms Interpreter |
| 1998 | PHP | PHP: Hypertext Preprocessor |
Uchinchi nom - rekursiv qisqartma: birinchi harfning o'zi "PHP" degani. Bu dasturchilar orasidagi an'anaviy hazil (xuddi GNU = "GNU's Not Unix" kabi).
Nomi "shaxsiy sahifa" bo'lib qolgan bo'lsa ham, bugun PHP bilan banklar, ijtimoiy tarmoqlar va yirik tijorat saytlari yoziladi.
1997: ikki talaba tilni qayta yozadi #
PHP/FI tez tarqaldi, lekin uning ichki tuzilishi zaif edi - u bir odamning shaxsiy vositasi bo'lib qolgan.
1997-yilda Isroildagi Texnion universiteti talabalari Andi Gutmans va Zeev Suraski uni elektron do'kon loyihasi uchun ishlatmoqchi bo'lishdi va yetarli emasligini ko'rishdi. Shunda ular tilning yuragini - tahlilchisini noldan qayta yozishdi.
Natija 1998-yilda PHP 3 sifatida chiqdi. Lerdorf loyihani ularga ochiq qo'ldan topshirdi - va bu PHP ni bir kishining vositasidan jamoa mahsulotiga aylantirdi.
1999-yilda ular yangi dvigatelni Zend deb atashdi - bu Zeev va Andi ismlarining birikmasi.
PHP ning obro'siga eng ko'p zarar yetkazgan narsa - uning eski kodi. 2000-yillardagi qo'llanmalar hali ham qidiruvda birinchi o'rinlarda chiqadi.
| Eski (ishlatmang) | Zamonaviy |
|---|---|
mysql_query() | PDO |
ereg() | preg_match() |
$HTTP_POST_VARS | $_POST |
| Turlarsiz funksiyalar | function f(int $a): string |
array() | [] |
Qo'lda require | Composer avtoyuklash |
Birinchi ustundagi narsalarning aksariyati tildan
butunlay olib tashlangan. Agar topgan misolingizda
mysql_query bo'lsa - u 2012-yildan eski va bugungi PHP da
umuman ishlamaydi.
Bu darslikda faqat zamonaviy usul ko'rsatiladi.
PHP qanday ishlaydi #
Bu darslikdagi har bir misol quyidagi ikki qator bilan boshlanadigan faylda ishga tushirilgan:
<?php
declare(strict_types=1);
Birinchi qator - PHP kodi boshlanganini bildiradi. Ikkinchisi qat'iy turlar rejimini yoqadi: uni 3-bo'limda batafsil ko'ramiz. Qisqasi, u PHP ni jimgina tur almashtirishdan to'xtatadi va xatolarni erta ko'rsatadi.
Takrorlanmasligi uchun keyingi misollarda bu ikki qatorni yozmaymiz.
// Har bir misol qat'iy turlar rejimida ishlaydi.
// PHP kodi SERVERDA bajariladi va natija HTML ga aylanadi
$ism = "Husanboy";
$soat = 9;
$salom = $soat < 12 ? "Xayrli tong" : "Assalomu alaykum";
// date() ikkinchi argumentsiz HOZIRGI vaqtni oladi. Misol har safar
// bir xil chiqishi uchun biz unga aniq vaqt beramiz.
$vaqt = mktime(9, 0, 0, 9, 1, 2024);
echo "<h1>{$salom}, {$ism}!</h1>\n";
echo "<p>Sana: " . date("d.m.Y", $vaqt) . "</p>\n";
// Brauzer FAQAT quyidagi natijani oladi - PHP kodini ko'rmaydi
<h1>Xayrli tong, Husanboy!</h1>
<p>Sana: 01.09.2024</p>
Bu ikki til raqib emas, ular turli joyda ishlaydi:
| PHP | JavaScript | |
|---|---|---|
| Qayerda ishlaydi | Serverda | Brauzerda |
| Foydalanuvchi ko'radimi | Yo'q | Ha, kodni o'qiy oladi |
| Ma'lumotlar bazasiga kira oladimi | Ha | Yo'q (to'g'ridan-to'g'ri) |
| Parollarni tekshiradimi | Ha | Hech qachon |
| Sahifa yuklangach ishlaydimi | Yo'q | Ha |
Muhim xulosa: ishonchli tekshiruv faqat serverda bo'ladi. JavaScript dagi forma validatsiyasi - bu foydalanuvchiga qulaylik, himoya emas. Uni brauzerda o'chirib qo'yish mumkin.
Shuning uchun 9-bo'limda biz bir xil tekshiruvni PHP da qaytadan yozamiz.
HTML bilan aralashtirish #
$mahsulotlar = [
["nom" => "Klaviatura", "narx" => 350000, "bor" => true],
["nom" => "Sichqoncha", "narx" => 120000, "bor" => true],
["nom" => "Monitor", "narx" => 2400000, "bor" => false],
];
echo "<ul>\n";
foreach ($mahsulotlar as $m) {
$holat = $m["bor"] ? "mavjud" : "tugagan";
echo " <li>{$m['nom']} - " . number_format($m["narx"], 0, ",", " ")
. " so'm ({$holat})</li>\n";
}
echo "</ul>\n";
<ul>
<li>Klaviatura - 350 000 so'm (mavjud)</li>
<li>Sichqoncha - 120 000 so'm (mavjud)</li>
<li>Monitor - 2 400 000 so'm (tugagan)</li>
</ul>
Yuqorida uchta mahsulot bor edi. Agar ular uch ming bo'lsa ham kod aynan shu bo'lib qoladi - faqat ma'lumot manbasi o'zgaradi.
Aynan shu narsa PHP ni statik HTML dan ajratib turadi:
| Statik HTML | PHP |
|---|---|
| Har bir sahifa qo'lda yoziladi | Bitta shablon, ko'p ma'lumot |
| Narx o'zgarsa - faylni tahrirlash | Bazada bitta qator o'zgaradi |
| Qidiruv ishlamaydi | Har qanday filtr mumkin |
| Foydalanuvchi kirishi yo'q | Sessiya va huquqlar bor |
16-bo'limda bu ro'yxatni ma'lumotlar bazasidan olamiz.
PHP qayerda ishlatiladi #
| Soha | Misollar |
|---|---|
| Kontent tizimlari | WordPress, Drupal, Joomla |
| Elektron tijorat | Magento, WooCommerce, PrestaShop |
| Ensiklopediya | Wikipedia (MediaXiki dvigateli) |
| Freymvorklar | Laravel, Symfony, CodeIgniter |
| Korporativ tizimlar | CRM, ombor, buxgalteriya dasturlari |
| API xizmatlari | Mobil ilovalar uchun backend |
Server tili ma'lum bo'lgan saytlarning katta ko'pchiligi bugun ham PHP da ishlaydi. Sabablari:
1. Har qanday hostingda bor. Eng arzon hosting ham PHP va MySQL beradi. Boshqa tillar uchun ko'pincha alohida server sozlash kerak.
2. WordPress. Faqat bitta bu tizim internetdagi saytlarning katta qismini tashkil qiladi - va u PHP da.
3. Orqaga moslik. 2005-yilda yozilgan sayt bugun ham ishlaydi. Bu ba'zan kamchilik, lekin biznes uchun katta qulaylik.
4. PHP 7 va 8 tilni tubdan yaxshiladi. Tezlik ikki
barobar oshdi, qat'iy turlar, enum va match qo'shildi.
Bugungi PHP 2010-yildagi PHP emas.
Birinchi haqiqiy dastur #
function narxniFormatla(int $tiyin): string
{
return number_format($tiyin / 100, 2, ",", " ") . " so'm";
}
function chegirmaHisobla(int $narx, int $foiz): array
{
$chegirma = (int) round($narx * $foiz / 100);
return [
"asl" => $narx,
"chegirma" => $chegirma,
"yakuniy" => $narx - $chegirma,
];
}
$buyurtmalar = [
["mijoz" => "Malika", "summa" => 45000000, "foiz" => 10],
["mijoz" => "Nodira", "summa" => 12500000, "foiz" => 0],
["mijoz" => "Husanboy", "summa" => 89900000, "foiz" => 15],
];
printf("%-10s %17s %15s %17s\n", "MIJOZ", "ASL", "CHEGIRMA", "YAKUNIY");
echo str_repeat("-", 62) . "\n";
$jami = 0;
foreach ($buyurtmalar as $b) {
$h = chegirmaHisobla($b["summa"], $b["foiz"]);
printf(
"%-10s %17s %15s %17s\n",
$b["mijoz"],
narxniFormatla($h["asl"]),
$h["chegirma"] > 0 ? narxniFormatla($h["chegirma"]) : "-",
narxniFormatla($h["yakuniy"])
);
$jami += $h["yakuniy"];
}
echo str_repeat("-", 62) . "\n";
printf("%-10s %51s\n", "JAMI", narxniFormatla($jami));
MIJOZ ASL CHEGIRMA YAKUNIY
--------------------------------------------------------------
Malika 450 000,00 so'm 45 000,00 so'm 405 000,00 so'm
Nodira 125 000,00 so'm - 125 000,00 so'm
Husanboy 899 000,00 so'm 134 850,00 so'm 764 150,00 so'm
--------------------------------------------------------------
JAMI 1 294 150,00 so'm
float da saqlamangYuqoridagi kodda summalar tiyinda, ya'ni butun sonda saqlangan. Bu tasodif emas.
var_dump(0.1 + 0.2 == 0.3);
Bu ifoda false qaytaradi - PHP da ham, boshqa deyarli
barcha tillarda ham. Sabab: 0.1 ni ikkilik sanoq
sistemasida aniq ifodalab bo'lmaydi.
Moliyaviy hisob-kitobda bu falokat: minglab amaldan keyin tiyinlar yo'qoladi va hisobot mos kelmaydi.
| Yondashuv | Tavsiya |
|---|---|
float da so'm | Hech qachon |
int da tiyin | Ha - eng oddiy yechim |
string + bcmath | Juda katta summalar uchun |
Bu qoidani 3-bo'limda batafsil ko'ramiz.
Bu darslikda nima bo'ladi #
| Bo'limlar | Mavzu |
|---|---|
| 1-3 | Tanishuv, muhit, sintaksis va turlar |
| 4-7 | Satrlar, massivlar, shartlar, funksiyalar |
| 8-11 | Formalar, validatsiya, sessiyalar, fayllar |
| 12-15 | OOP, vorislik, nomlar fazosi, istisnolar |
| 16-18 | PDO va ma'lumotlar bazasi, xavfsizlik, JSON va API |
| 19-20 | Zamonaviy PHP 8 va yakuniy loyiha |
- Brauzerda istalgan saytni oching va
Ctrl+Ubosing - PHP kodini ko'ryapsizmi? - Nima uchun ko'rinmasligini o'z so'zlaringiz bilan tushuntiring.
- PHP nomining uch versiyasini eslab qoling.
- Nima uchun PHP 6 chiqmaganini ayting.
mysql_queryishlatilgan qo'llanma topsangiz, uni nima uchun tashlab yuborish kerak?- PHP va JavaScript qaysi vazifalarni bajarishini jadval qilib yozing.
- Parolni tekshirish qaysi tomonda bo'lishi kerak - brauzerdami yoki serverda?
- Bitta shablon ming mahsulotni qanday chiqarishini tushuntiring.
- Nima uchun pul
floatda saqlanmasligini ayting. - Qog'ozga PHP bilan yaratmoqchi bo'lgan uchta g'oyangizni yozing.
Xulosa #
- PHP ni 1994-yilda Rasmus Lerdorf shaxsiy sahifasi uchun kichik vosita sifatida yozgan.
- 1997-yilda Andi Gutmans va Zeev Suraski tahlilchini noldan qayta yozib, PHP 3 ni yaratdi.
- Zend dvigatelining nomi ularning ismlaridan olingan: Zeev + Andi.
- PHP 6 hech qachon chiqmagan - Unicode urinishi muvaffaqiyatsiz tugadi, shuning uchun 5 dan keyin 7 keldi.
- PHP 7 tezlikni ikki barobar oshirdi, PHP 8 qat'iy turlar va
matchni keltirdi. - PHP serverda ishlaydi - brauzer faqat natijani oladi, kodni hech qachon ko'rmaydi.
- Shuning uchun parol, kalit va baza ma'lumotlari PHP da xavfsiz turadi.
- Ishonchli tekshiruv faqat serverda bo'ladi; JavaScript validatsiyasi - qulaylik, himoya emas.
- Eski qo'llanmalardan ehtiyot bo'ling:
mysql_queryvaeregtildan olib tashlangan. - Pulni butun sonda (tiyinda) saqlang,
floatda emas.
Keyingi bo'limda muhitni sozlaymiz va PHP ni ikki xil - buyruq satri va veb-server orqali ishga tushiramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.