Windows.  Viruslar.  Noutbuklar.  Internet.  Idora.  Utilitalar.  Haydovchilar

Albatta, sizning uyingizda shkaf yoki sandiq bor. Ulardan foydalanish printsipi oddiy: biz hozir kerak bo'lmagan narsalarni qo'yamiz, lekin birozdan keyin kerak bo'lishi mumkin.

O'zgaruvchilar aynan bir xil tarzda joylashtirilgan. Siz ularga bir oz qiymat qo'yishingiz va kerak bo'lguningizcha u erda saqlashingiz mumkin.

O'zgaruvchilar yaratish

Siz quyidagi kabi o'zgaruvchiga qiymat qo'yishingiz mumkin:

Yuqoridagi kodda biz $name o'zgaruvchisini yaratdik va unga Ivan qiymatini qo'ydik, keyin $age o'zgaruvchisini yaratdik va unga 20 qiymatini berdik.

"O'zgaruvchi" nomi skriptni bajarish paytida uning qiymati o'zgarishi mumkinligini anglatadi:

Ba'zi tillarda o'zgaruvchi avval "e'lon qilinishi" va keyin ishlatilishi kerak. PHP-da hech qanday deklaratsiya yo'q - o'zgaruvchiga qiymat qo'yganingizda yaratiladi.
Biroq, PHP dasturchilari ko'pincha "o'zgaruvchi yaratish" o'rniga "o'zgaruvchini e'lon qilish" deb aytadilar.

Shuningdek, "qo'yish" o'rniga o'zgaruvchan qiymat"" ko'pincha "qiymat belgilash" deb aytiladi.
Sababi oddiy - o'zgaruvchida qiymatni saqlaydigan = belgisi "tayinlash operatori" deb ataladi. Shuning uchun "tegishli" atamasi.

O'zgaruvchilarni nomlash qoidalari

1. O‘zgaruvchining nomi $ belgisi bilan boshlanadi.

2. Ikkinchi belgi harf yoki pastki chiziq bo'lishi mumkin _

O'zgaruvchilar nomlari katta-kichik harflarga sezgir. $name va $Name turli o'zgaruvchilardir.

Ekranda o'zgaruvchining qiymatini ko'rsatish

Biz allaqachon bilgan echo buyrug'i yordamida o'zgaruvchini ko'rsatishingiz mumkin:

Echo buyrug'i bir vaqtning o'zida bir nechta qiymatlarni ko'rsatishga imkon beradi:

Echo uchun ikkita qiymatni vergul bilan ajratganimizga e'tibor bering. Shunday qilib, biz xohlagancha ko'p qiymatlarni o'tkazishimiz mumkin. Quyidagi ikkita misol bir xil natija beradi:

PHP da o'zgaruvchilarni ko'rsatish uchun stenok sintaksisi ham mavjud. O'rniga

Oldin PHP versiyalari 5.4 stenogramma sintaksisi faqat kiritilganda ishladi PHP sozlamalari short_open_tag direktivasi, bu ham qisqartirilgan ochilish tegidan foydalanishga imkon beradi

O'zgaruvchining qiymatini tekshirish

Echo buyrug'i har doim ham o'zgaruvchining joriy qiymatini tekshirish uchun qulay emas. Misol uchun, agar siz bo'sh "" qatorini ko'rsatishga harakat qilsangiz, ekranda mutlaqo hech narsa ko'rsatilmaydi. Buning sababi nimada ekanligi aniq emas - bo'sh o'zgaruvchi yoki buzilgan kod.

Shuning uchun, o'zgaruvchining qiymatini tekshirish uchun var_dump() funktsiyasidan foydalaniladi:

Skriptni bajarish natijasi:

String(5) "Vasya" string(0) ""

Ko'rib turganingizdek, PHP nafaqat o'zgaruvchining mazmunini, balki belgilar sonini va hatto o'zgaruvchining (string) turini ham ko'rsatdi. Biz keyingi darslarda ma'lumotlar turlarini batafsil ko'rib chiqamiz.

O'zgaruvchilarni olib tashlash

Mavjud o'zgaruvchini unset() funktsiyasidan foydalanib olib tashlashingiz mumkin:

Endi biroz mashq qilish vaqti keldi.

Esda tutingki, deyarli har qanday PHP muammosi bir nechta echimlarga ega bo'lishi mumkin. Shuning uchun, agar sizning yechimlaringiz ushbu saytda yozilganlardan farq qilsa, bu siz noto'g'ri ish qilganingizni anglatmaydi.

Skript yozing:
1. Sarlavha va mazmun nomlari va ba'zi qiymatlar bilan o'zgaruvchilar yaratadi.
2. h1 tegi ichidagi sarlavha o'zgaruvchisi qiymatini va div tegi ichidagi kontent o'zgaruvchisi qiymatini ko'rsatadi.

Yechimni ko'rsatish

", $title,""; aks-sado "

", $content,"
"; ?>

Bu qaror yagona to‘g‘ri emasligiga yana bir bor e’tiboringizni qaratmoqchiman. Masalan, quyidagi kod bir xil natijani beradi:

Windows-dagi muhit o'zgaruvchilari tizim sozlamalari va foydalanuvchi muhiti haqida turli ma'lumotlarni o'z ichiga oladi. Foydalanuvchi, tizim va jarayon muhiti o'zgaruvchilari o'rtasida farqlanadi.

Windows-dagi muhit o'zgaruvchilari tarkibini ko'rishning eng oson yo'li Tizim xususiyatlarini ochishdir ( sysdm.cpl) -> Kengaytirilgan -> Atrof-muhit o'zgaruvchilari. Ko'rib turganingizdek, ochilgan oynada ikkita bo'lim mavjud: yuqori qismida foydalanuvchining muhit o'zgaruvchilari, pastki qismida esa tizim mavjud.

Bundan tashqari, muhit o'zgaruvchilari tizim registrida saqlanadi. Foydalanuvchi o'zgaruvchilari ichida saqlanadi. Tizim - ichida HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Siz barcha muhit o'zgaruvchilari qiymatlarini ko'rsatishingiz mumkin buyruq qatori Windows. Buyruq oddiy:

Buyruq ro'yxatni chiqaradi atrof-muhit o'zgaruvchilari va ularning ma'nolari.

PowerShell-da siz barcha muhit o'zgaruvchilarini ko'rsatish uchun buyruqdan foydalanishingiz mumkin:

Agar siz faqat bitta o'zgaruvchining qiymatini ko'rsatishingiz kerak bo'lsa, siz echo buyrug'ini ishlatishingiz kerak va o'zgaruvchining nomi foiz belgilari bilan o'ralgan bo'lishi kerak. Masalan,

Echo %systemroot%

o'rnating > c:\tmp\env_var.txt

Muayyan jarayon uchun atrof-muhit o'zgaruvchilari bepul yordamida olinishi mumkin Process Explorer yordamchi dasturlari(Sysinternals'dan). Faqat jarayon xususiyatlarini oching va yorliqga o'ting Atrof-muhit.

php da o'zgaruvchilar- bu o'z ichiga olishi mumkin bo'lgan ma'lumot konteynerining bir turi Har xil turlar ma'lumotlar (matn, raqamlar, massivlar va boshqalar). Umuman olganda, o'zgaruvchilar ularda ko'rsatilgan ma'lumotlarni yaratish, saqlash, o'zgartirish va keyinchalik tezkor kirish imkonini beradi.

PHP da o'zgaruvchini qanday yaratish mumkin

Dastlab, o'zgaruvchilar belgini o'z ichiga oladi $ (dollar) - o'zgaruvchidan, keyin harflardan foydalanishni belgilash Lotin alifbosi(a dan z gacha va kichik va katta), oxirida men o'z ichiga olishim mumkin raqamlar. Sarlavhada (oxirida emas) pastki chiziqdan foydalanish ham mumkin.

O'zgaruvchilarni qanday nomlash mumkin:

$var
$oʻzgaruvchi
$1945 yil
$_variable
Qanday qilib o'zgaruvchilarni nomlamaslik kerak:

$1 - faqat raqamlardan iborat
$1var - o'zgaruvchi nomini raqam bilan boshlay olmaysiz
$/var - qo'shimcha belgilar orasida faqat pastki chiziqqa ruxsat beriladi _
$variable - PHP hujjatlarida kirill alifbosiga ruxsat berilgan, lekin tavsiya etilmaydi
$var iable - bo'shliqlardan foydalanib bo'lmaydi

Har bir o'zgaruvchiga qiymat beriladi. Belgisi qiymat belgilash uchun ishlatiladi = (teng). Skriptni qayta ishlash jarayonida o'zgaruvchining qiymati turli shartlarga qarab qayta-qayta o'zgarishi mumkin.

$city = "Moskva"; // $city o'zgaruvchisiga Moskva satri (tirnoq ichida) qiymati berildi
$yil = 1147; // va $year o'zgaruvchisiga 1147 raqamli qiymat berildi
?>

$name = "Iskandar";
$Name = "Aleksey";
echo "$name, $Name"; // "Aleksandr, Aleksey" ni chop etadi
?>

PHP o'zgaruvchilarni chop etish

O'zgaruvchilarni qanday ko'rsatishni alohida ko'rib chiqishingiz kerak chiqish bayonotlari, kimning ishini biz oxirgi darsda ko'rib chiqdik PHP sahifasini yaratish. Xulosa chiqarish operatorlari. . Quyida izohlar bilan bir qator illyustrativ misollar keltiraman.

// Biz o'zgaruvchilarning qiymatlarini shunday o'rnatamiz
$name1 = "Aleksey";
$name2 = "Aleksandr";

// Chiqish o'zgaruvchilari
echo $name2; // Natija: Aleksandr
echo "ism1 - $name1"; // ism1 - Aleksey

// Foydalanish yagona tirnoq ko'rsatiladi
// qiymat emas, o'zgaruvchi nomi
echo "ism1 - $name1"; // chiqadi: name1 - $name1

// siz shunchaki o'zgaruvchilarning qiymatlarini ko'rsatishingiz mumkin
echo $name1; // Aleksey
echo $name1,$name2; // Aleksey Aleksandr
echo $name1." ".$name2; // Aleksey Aleksandr
echo "$name1, $name2"; // Aleksey, Aleksandr

Echo<<Bu chiqarish uchun "bu yerda hujjat" sintaksisidan foydalanadi
$ o'zgaruvchan o'zgaruvchini almashtirish bilan bir nechta satr.
OXIRI;

PHP o'zgaruvchilari bilan operatsiyalar

PHP da arifmetik amallar
Raqamli qiymatlar bo'lsa, siz arifmetik amallarni bajarishingiz mumkin: qo'shish, ayirish, ko'paytirish va hokazo.

-$a(inkor) $a belgisini o'zgartiring.
$a + $b(qo'shish) $a va $b yig'indisi.
$a - $b(ayirish) $a va $b ning farqi.
$a * $b(ko'paytirish) $a va $b ko'paytmasi.
$a / $b(bo'linish) $a ning $b ga bo'lingan qismi.
$a % $b(modul bo'linishi) $a $b ga bo'linganda qolgan butun son.
Keling, misollarni ko'rib chiqaylik

$a = 2; // raqamlar holatida tirnoq ishlatilmasligiga e'tibor bering
$b = 3; // raqamlar holatida tirnoq ishlatilmasligiga e'tibor bering

$natija = $a + $b; // o'zgaruvchilarni qo'shish
echo $natija; // 5 chop etadi

$natija = $b - $a; // o'zgaruvchilarni qo'shish
echo $natija; // 1 chop etadi

PHP da oshirish va kamaytirish amallari
Ushbu operatsiyalar asosan tsikllarni qurishda foydali bo'ladi, biz biroz keyinroq gaplashamiz.
Prefiks- o'zgaruvchidan OLD yoziladigan operatorlar ( --$a; +$a). O'zgarishlardan oldin o'zgaruvchining qiymatini qaytaring.
Postfiks- o'zgaruvchidan keyin yoziladigan operatorlar ( $a--; $a--). O'zgaruvchining qiymatini o'zgarishlar bilan qaytaring.
O'sish- qiymatni oshirish.
Kamaytirish- qiymatning pasayishi.

+$a Prefiks ortishi. $a ni bir marta oshiradi va $a qiymatini qaytaradi.
$a++ Postfiks ortishi. $a qiymatini qaytaradi va keyin $a ni bir marta oshiradi.
--$a Prefiksning kamayishi. $a ni bir marta kamaytiradi va $a qiymatini qaytaradi.
$a-- Postfiksning kamayishi. $a qiymatini qaytaradi va keyin $a ni bir marta kamaytiradi.
aks-sado "

Postfiks ortishi

";
$a = 5;
echo "5 bo'lishi kerak:" . $a++. "\n";

aks-sado"

Prefiks ortishi

";
$a = 5;
echo "6 bo'lishi kerak:" . +$a. "\n";
echo "6 bo'lishi kerak:" . $a . "\n";

aks-sado"

Postfiksning kamayishi

";
$a = 5;
echo "5 bo'lishi kerak:" . $a--. "\n";

aks-sado"

Prefiksning kamayishi

";
$a = 5;
echo "4 bo'lishi kerak:" . --$a. "\n";
echo "4 bo'lishi kerak:" . $a . "\n";
?>

PHP da tayinlash operatsiyalari
Asosiy operator kabi ko'rinadi = . Bir qarashda bu tenglik operatoridek tuyulishi mumkin. Aslida bu haqiqat emas. Aslida, tayinlash operatori chap operand o'ng ifodaning qiymatini olishini bildiradi (ya'ni, natijada olingan qiymatga o'rnatiladi). Birlashtirilgan operatorlar- bu keyingi operatsiyalar uchun oldingi o'zgaruvchilar qiymatlaridan foydalanishga imkon beruvchi operatorlar (satr o'zgaruvchisiga (matn bilan) qo'shing yoki raqamli qiymatlarni qo'shing).

$a = ($b = 2) + 4; // natija: $a 6 ga o'rnatildi, $b o'zgaruvchisi 2 ga tayinlandi.

$a = 2;
$a += 3; // $a ni 5 ga o'rnatadi, yozishga o'xshaydi: $a = $a + 3;
$b = "Salom";
$b .= "Tinchlik!"; // $b ni "Salom Dunyo!" qatoriga o'rnatadi, masalan $b = $b . "U yerda!";

Shuningdek bor taqqoslash operatsiyalari Va aqliy charchoq, lekin ular haqida keyingi darslarda gaplashamiz. Men sizni darhol katta hajmdagi ma'lumotlar bilan qo'rqitmaslikka harakat qilaman!)

13 yil oldin

E'tibor qilish kerak bo'lgan ozgina narsa:

Agar Siz o'chirib qo'yish RegisterGlobals va tegishli, keyin get_defined_vars() dan foydalaning, siz shunga o'xshash narsalarni ko'rishingiz mumkin quyidagi:

Massiv
[ GLOBALS ] => Massiv
[ GLOBALS ] => Massiv
*REKURSIYA*
[ _POST ] => Massiv()
[ _GET ] => Massiv()
[ _COOKIE ] => Massiv()
[ _FILES ] => Massiv()
)

[ _POST ] => Massiv()
[ _GET ] => Massiv()
[ _COOKIE ] => Massiv()
[ _FILES ] => Massiv()

)
?>

$_SERVER yo'qligiga e'tibor bering, agar u biron bir joyda ishlatilsa, php faqat superglobal $_SERVERni yuklaydi.

chop etish "

" .htmlspecialchars(print_r(get_defined_vars(), true))."
" ;
chop etish "
" . htmlspecialchars (print_r ($_SERVER , true )) ."
" ;
?>

Va keyin $_SERVER ikkala ro'yxatda paydo bo'ladi. O'ylaymanki, bu haqiqatan ham yutuq emas, chunki hech qanday yomon narsa bo'lmaydi, ammo bu qiziq qiziqish.

6 yil oldin

get_defined_vars() o'zgaruvchilarni faqat siz funktsiyani chaqirgan nuqtada olganligi sababli, joriy doirada aniqlangan o'zgaruvchilarni olishning oddiy usuli mavjud.

// PHP skriptingizning eng yuqori qismi
$vars = get_defined_vars();

// Endi ishingizni qiling
$foo = "foo" ;
$bar = "bar" ;

// Joriy miqyosda aniqlangan barcha o'zgaruvchilarni oling
$vars = array_diff(get_defined_vars(), $vars);

aks-sado "

"
;
print_r($vars);
aks-sado "
" ;
?>

15 yil oldin

Bu displey yoki elektron pochta uchun disk raskadrovka hisobotini yaratadigan funksiya
get_defined_vars dan foydalanish. Tafsilotsiz suratga olish uchun juda mos keladi
foydalanuvchi kiritishiga tayanib.

function createDebugReport ($ metod, $defined_vars, $email = "aniqlanmagan" )(
// Ko'rsatish yoki elektron pochta orqali disk raskadrovka hisobotini yaratish funksiyasi.
// Foydalanish: createDebugReport(metod,get_defined_vars(),email);
// Bu erda usul "brauzer" yoki "elektron pochta".

// "get_defined_vars" tomonidan qaytarilgan kalitlar uchun e'tibor bermaslik ro'yxatini yarating.
// Masalan, HTTP_POST_VARS, HTTP_GET_VARS va boshqalar
// ortiqcha (_POST, _GET bilan bir xil)
// Xavfsizlik nuqtai nazaridan e'tibor bermaslik kerak bo'lgan variantlarni ham qo'shing - ya'ni. PHPSESSID.
$ignorelist =massiv("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS" , "HTTP_COOKIE" );

$vaqt tamg'asi = sana ("m/d/y h:m:s" );
$message = "Debug hisoboti yaratildi $timestamp \n" ;

// Yaxshi o'lchov uchun oxirgi SQL xatosini oling, bu erda $link manba identifikatoridir
// mysql_connect uchun. Ma'lumotlar bazasi yoki abstraksiya sozlamalari uchun fikr bildiring yoki o'zgartiring.
global $link ;
$sql_error = mysql_error($link);
if($sql_error )(
$message .= "\nMysql xabarlari:\n" . mysql_error($link);
}
// MySQL-ni tugatish

// Bu yerda rekursiv funksiyadan foydalanish mumkin. Siz fikrni tushundingiz ;-)
foreach($defined_vars sifatida $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$message .= "\n $kalit massivi (kalit=qiymat):\n" ;
foreach($val $subkey sifatida => $subval)(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$xabar .= $subkey . " = ". $subval. "\n" ;
}
elseif(! in_array ($subkey , $ignorelist ) && is_array ($subval ))(
foreach($subval sifatida $subkey => $subval)(
if(! in_array ($subkey, $ignorelist))(
$xabar .= $subkey . " = ". $subsubval. "\n" ;
}
}
}
}
}
elseif(!
is_array ($val ) && ! in_array ($key , $ignorelist ) && $val )(
$message .= "\nOʻzgaruvchi" . $kalit. " = ". $val. "\n" ;
}
}

If($method == "brauzer" )(
echo nl2br($xabar);
}
elseif ($ usuli == "elektron pochta" )(
if($email == "aniqlanmagan" )(
$email = $_SERVER [ "SERVER_ADMIN" ];
}

$mresult = mail ($email , ". $_ENV [ "HOSTNAME" ] uchun disk raskadrovka hisoboti. "", $message );
if($mresult == 1 )(
aks-sado "Nosozliklarni tuzatish hisoboti muvaffaqiyatli yuborildi.\n";
}
boshqa(
aks-sado "Nosozliklarni tuzatish hisoboti yuborilmadi.\n";
}
}
}
?>

17 yil oldin

Get_defined_vars obyektini XML ga aylantirish uchun oddiy tartib.

obj2xml funksiyasi ($v, $indent = "" ) (
esa (list($key , $val ) = har bir ($v )) (
agar ($key == "__attr" ) davom etsa;
// __attrni tekshiring
agar (is_object ($val -> __attr )) (
esa (list($key2 , $val2 ) = har bir ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
agar (is_array ($val ) || is_object ($val )) (
chop etish (" $ indent< $key$attr >\n");
obj2xml($val, $indent. "");
chop etish (" $ indent\n");
}
Aks holda chop etish (" $indent< $key$attr >$val\n");
}
}

//Obyekt namunasi
$x -> ism -> birinchi = "Jon" ;
$x -> ism -> oxirgi = "Smit" ;
$x -> arr [ "Fruit" ] = "Bannana" ;
$x -> arr [ "Veg" ] = "Sabzi" ;
$y -> mijoz = $x;
$y -> mijoz -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
chiqadi:


Jon
Smit


Banan
Sabzi

11 yil oldin

Eslatma sifatida get_defined_vars() o'zgarmaydigan havolalar to'plamini qaytarmaydi (men umid qilganimdek). Masalan:

// o'zgaruvchini aniqlang
$my_var = "foo" ;

// belgilangan o'zgaruvchilar ro'yxatini oling
$defined_vars = get_defined_vars();

// endi qaytarilgan massiv orqali qiymatni o'zgartirishga harakat qiling
$defined_vars [ "my_var" ] = "bar" ;

echo $my_var , "\n" ;

?>

"foo" (asl qiymat) chiqaradi. Agar get_defined_vars() ning ularga havola qilish uchun ixtiyoriy argumenti bo'lsa yaxshi bo'lardi, lekin men buni juda ixtisoslashgan so'rov deb o'ylayman. Buni o'zingiz (kamroq qulayroq) kabi bir narsa bilan qilishingiz mumkin:

$defined_vars = massiv();
$var_names = massiv_kalitlari(get_defined_vars());

foreach ($var_names $var_name sifatida)
{
$defined_vars [ $var_name ] =& $ $var_name ;
}

?>

1 yil oldin

Oldin bu yerda get_defined_vars da "bu" haqida yozgan edim.

Ma'lum bo'lishicha, u har doim ham mavjud emas, lekin ba'zi hollarda u tushunarsiz tarzda paydo bo'ladi.

Php -r "
sinf testi (
umumiy funksiya a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
umumiy funktsiya b() (var_dump(array_keys(get_defined_vars()));$this;)
}
$t = yangi test();
$t->a();
$t->b();
"

Massiv()
massiv ("bu")

Bu PHP 7.2 da sodir bo'lmaydi, lekin PHP 5.6 da sodir bo'ladi.

1 yil oldin

Bu yerdagi ba'zi izohlar bu funksiya havolalarni qaytarmasligiga ishora qiladi. Biroq, u ismlarni qaytaradi va ismlar "ma'lumotnomalar" dir.

Bu yerda uni havolalarga aylantiradigan takliflarni tavsiya etmayman.

Umumiy funksiya x($a, $b, $c) (
foreach(array_keys(get_defined_vars()) $key sifatida)
if($key !== "bu")
$this->y($($kalit));
}

Umumiy funksiya y(&$input) (
$input++;
}

$() oʻrniga Siz .. qila olasiz; siz ... mumkin$$ dan ham foydalaning.

Men o'z vaqtida juda umumiy kod yaratish uchun ba'zi aql bovar qilmaydigan ishlarni qildim, lekin men hech qachon yuqoridagi kabi hech narsa qilishim shart emas. Bu hatto ishlamasligi ham mumkin (lekin u $a[$key] dan farq qilmasligi kerak).

Siz $$key++ ni ham qilishingiz mumkin, lekin men hech qachon dahshatli darajada yomon bo'lmagan kodni ko'rmaganman (dinamikdan foydali bo'lmagan joyda dinamikdan foydalanish).

Agar siz shunga o'xshash biror narsa qilsangiz, uni qo'shimcha tekshirib ko'ring.

Agar xatolikni sezsangiz, matn qismini tanlang va Ctrl+Enter tugmalarini bosing
ULOSING: