Php всички променливи. Променливи в PHP

Php променливие вид информационен контейнер, който може да съдържа различни видове данни (текст, числа, масиви и т.н.). Като цяло променливите ви позволяват да създавате, съхранявате, променяте и в бъдеще бързо да получите достъп до информацията, посочена в тях.

Как да създадете променлива в PHP

Първоначално променливите съдържат знака $ (долар) - обозначение на използването на променлива, след това букви Латинска азбука(от a до z и малки и големи), в края може да съдържа числа... Също така, името може да използва долна черта (не в края).

Как можете да назовете променливи:

$ var
$ променлива
1945 щ.д.
$ _променлива
Как променливите не могат да бъдат извикани:

$ 1 - се състои само от цифра
$ 1var - не можете да започнете име на променлива с цифра
$ / var - разрешени са само подчертавания на допълнителни знаци _
$ променлива - Кирилицата е разрешена от php документацията, но не се препоръчва
$ var iable - интервалите не могат да се използват

На всяка променлива се присвоява стойност. За да зададете стойност, използвайте знака = (равно на). По време на обработката на скрипта стойността на променливата може да се променя многократно в зависимост от различни условия.

$ city = "Москва"; // на променливата $ city е присвоена низ (в кавички) стойност Москва
$ година = 1147; // и на променливата $ year беше присвоена числовата стойност 1147
?>

$ name = "Александър";
$ Name = "Алексей";
ехо "$ name, $ Name"; // показва "Александър, Алексей"
?>

Променлив изход на PHP

Отделно трябва да помислите как да показвате променливи с помощта изходни оператори, чиято работа разгледахме в последния урок, Създаване на PHP страница. Изходни оператори. ... По -долу ще дам редица илюстративни примери с коментари.

// Ето как присвояваме стойности на променливите
$ name1 = "Алексей";
$ name2 = "Александър";

// Показване на променливи
ехо $ name2; // Изход: Александър
ехо "име1 е $ name1"; // име1 е Алексей

// Когато използвате единични кавички, изходът е
// име на променлива, а не стойност
ехо "име1 е $ name1"; // отпечатва: name1 е $ name1

// можете просто да покажете стойностите на променливите
ехо $ name1; // Алексей
ехо $ name1, $ name2; // Алексей Александър
ехо $ name1. "". $ name2; // Алексей Александър
ехо "$ name1, $ name2"; // Алексей, Александър

Ехо<<Това използва синтаксиса "тук документ" за извеждане
няколко реда с заместване на $ променлива.
КРАЙ;

Променливи операции на PHP

Аритметични операции в PHP
В случай на числови стойности, можете да извършвате аритметични операции: събиране, изваждане, умножение и т.н.

- $ а(отрицание) Променете знака на $ a.
$ a + $ b(допълнение) Сумата от $ a и $ b.
$ a - $ b(изваждане) Разлика между $ a и $ b.
$ a * $ b(умножение) Произведението на $ a и $ b.
$ a / $ b(деление) Коефициентът на $ a, разделен на $ b.
$ a% $ b(по модул) Целочисленият остатък от $ a, разделен на $ b.
Нека разгледаме примери

$ a = 2; // забележка, в случай на числа, кавичките не се използват
$ b = 3; // забележка, в случай на числа, кавичките не се използват

$ резултат = $ a + $ b; // добавяне на променливи
echo $ резултат; // ще отпечата 5

$ резултат = $ b - $ a; // добавяне на променливи
echo $ резултат; // ще изведе 1

Операции за увеличаване и намаляване в PHP
Тези операции ще бъдат полезни главно при конструирането на цикли, за които ще говорим малко по -късно.
Префикс- оператори, написани ПРЕД променливата ( - $ а; ++ $ а). Връща стойността на променливата преди промяната.
Postfix- оператори, написани след променливата ( $ a--; $ a--). Връща променената стойност на променливата.
Прирастване- увеличаване на стойността.
Намаляване- намаляване на стойността.

++ $ аПрирастване на префикс. Увеличава $ a с едно и връща $ a.
$ a ++Прирастване на Postfix. Връща стойността на $ a и след това увеличава $ a с единица.
- $ аНамаляване на префикса. Намалява $ a с едно и връща стойността на $ a.
$ a-- Postfix декремент. Връща стойността на $ a и след това намалява $ a с единица.
ехо "

Прирастване на Postfix

";
$ a = 5;
ехо "Трябва да е 5:". $ a ++. "\ н";

Ехо "

Прирастване на префикс

";
$ a = 5;
ехо "Трябва да е 6:". ++ $ а. "\ н";
ехо "Трябва да е 6:". $ a. "\ н";

Ехо "

Postfix декремент

";
$ a = 5;
ехо "Трябва да е 5:". $ a--. "\ н";

Ехо "

Намаляване на префикса

";
$ a = 5;
ехо "Трябва да е 4:". - $ а. "\ н";
ехо "Трябва да е 4:". $ a. "\ н";
?>

Операции за присвояване на PHP
Основен операторизглежда като = ... На пръв поглед може да изглежда, че този оператор е равен. Всъщност това не е така. На практика операторът за присвояване означава, че на левия операнд е присвоена стойността на десния израз (т.е. зададена от получената стойност). Комбинирани оператори- това са оператори, които ви позволяват да използвате предишните стойности на променливите за следващи операции (добавете към низова променлива (с текст) или добавете числови стойности).

$ a = ($ b = 2) + 4; // резултат: $ a е зададен на 6, $ b е зададен на 2.

$ a = 2;
$ a + = 3; // задава $ a на 5, подобно на писането: $ a = $ a + 3;
$ b = "Здравейте";
$ b. = "Свят!"; // задава $ b на "Hello World!", както прави $ b = $ b. "Там!";

Също така има сравнителни операциии главоблъсканица, но ще говорим за тях в следващите уроци. Ще се опитам веднага да не ви плаша с голямо количество информация!)

Този урок изследва обхвата на PHP променливите. Обяснява разликата между локални и глобални обхвати, показва как да получите достъп до глобални променливи в рамките на функция, как да работите със суперглобали и как да създавате статични променливи.

Когато започнете да изучавате PHP и започнете да работите с функции и обекти, обхватът на променливите е малко объркващ. За щастие, правилата на PHP в това отношение са много лесни за разбиране (в сравнение с други езици за програмиране).

Какво е обхват?

Обхватът на променливата е контекстът, в който е дефинирана променлива и където може да бъде достъпен. PHP има два променливи обхвата:

  • Глобалното- променливите могат да бъдат достъпни навсякъде в скрипта
  • Местни- променливите могат да бъдат достъпни само във функцията, в която са дефинирани

Променливият обхват и особено локалният обхват улесняват управлението на кода ви. Ако всички променливи са глобални, те биха могли да бъдат променени навсякъде в скрипта. Това би довело до хаос и големи скриптове, тъй като много често различни части на скрипта използват променливи със същото име. Чрез обхвата на локалния контекст вие определяте границите на кода, който има достъп до променливата, което прави кода по -стабилен, модулен и по -лесен за отстраняване на грешки.

За променливите с глобален обхват се казва, че са глобални, а променливите с локален обхват се наричат ​​локални.

Ето пример за това как работят глобалните и локалните променливи.

";) sayHello (); echo" Value \ $ globalName: "$ globalName"
"; ехо" Стойност \ $ localName: "$ localName"
"; ?>

Здравей Хари! $ GlobalName стойност: "Zoe" $ localName стойност: ""

В този скрипт създадохме две променливи:

  • $ globalName- това е глобаленпроменлива
  • $ localName- това е местенпроменлива, която се създава във функцията sayHello ().

След създаването на променливата и функцията, скриптът извиква sayHello (), който извежда "Hello Hello!" ... След това скриптът се опитва да повтори стойностите на двете променливи. Ето какво става:

  • Защото $ globalNameе създаден извън функцията, той е достъпен навсякъде в скрипта, така че се показва „Zoya“.
  • $ localNameще бъде достъпна само във функцията sayHello (). Тъй като ехо изразът е извън функцията, PHP не позволява достъп до локалната променлива. Вместо това PHP приема, че кодът ще създаде нова променлива с име $ localName, която ще получи стойност по подразбиране на празен низ. затова второто извикване на echo отпечатва стойността "" за променливата $ localName.

Достъп до глобални променливи вътре във функция

За достъп до глобална променлива извън функциятапросто напиши името й. Но за достъп до глобалната променлива вътрешна функция, първо трябва да декларирате променливата като глобална във функцията, като използвате ключовата дума global:

Функция myFunction () (глобална $ globalVariable; // Достъп до глобалната променлива $ globalVariable)

Ако не го направите, PHP предполага, че създавате или използвате локална променлива.

Ето примерен скрипт, който използва глобална променлива вътре във функция:

"; global $ globalName; echo" Здравейте $ globalName!
";) sayHello ();?>

Когато се изпълни, скриптът ще изведе:

Здравей Хари! Здравей Зоя!

Функцията sayHello () използва глобалната ключова дума, за да декларира променливата $ globalName като глобална. Тогава тя може да получи достъп до променливата и да покаже нейната стойност ("Zoya").

Какво представляват суперглобалите?

PHP има специален набор от предварително дефинирани глобални масиви, които съдържат различна информация. Такива масиви се наричат суперглобали,тъй като те са достъпни отвсякъде в скрипта, включително вътрешното функционално пространство и не е необходимо да бъдат дефинирани с помощта на глобалната ключова дума.

Ето списък на суперглобалите, налични в PHP 5.3:

  • $ GLOBALS - списък на всички глобални променливи в скрипта (с изключение на суперглобали)
  • $ _GET - Съдържа списък с всички полета на формуляри, изпратени от браузъра, използвайки GET заявка
  • $ _POST - съдържа списък на всички полета на формуляри, изпратени от браузъра, използвайки POST заявка
  • $ _COOKIE - съдържа списък с всички бисквитки, изпратени от браузъра
  • $ _REQUEST - съдържа всички комбинации ключ / стойност, които се съдържат в масивите $ _GET, $ _POST, $ _COOKIE
  • $ _FILES - съдържа списък на всички файлове, заредени от браузъра
  • $ _SESSION - ви позволява да съхранявате и използвате променливи на сесията за текущия браузър
  • $ _SERVER - съдържа информация за сървъра, като например името на файла на скрипта, който се изпълнява, и IP адреса на браузъра.
  • $ _ENV - Съдържа списък с променливи на средата, предадени на PHP, например CGI променливи.
Например, можете да използвате $ _GET, за да получите стойностите на променливите, затворени в низа URL на заявката за скрипт, и да ги покажете на страницата:

Ако изпълните горния скрипт с URL низ http://www.example.com/script.php?yourName=Fred, той ще изведе:

Здравей Фред!

Предупреждение!В истински скрипт никога не трябва да използвате такъв трансфер на данни поради слаба сигурност. Винаги трябва да проверявате или филтрирате данните си.

Суперглобалният $ GLOBALS е много удобен за използване, тъй като ви позволява да организирате достъп до глобални променливи във функция, без да е необходима ключовата дума global. Например:

";) sayHello (); // Извежда" Здравей, Зоуи! "?>

Статични променливи: те са някъде наблизо

Когато създавате локална променлива вътре във функция, тя съществува само докато функцията работи. Когато функцията приключи, локалната променлива изчезва. Когато функцията се извика отново, се създава нова локална променлива.

Това работи чудесно в повечето случаи. По този начин функциите са самостоятелни и винаги работят еднакво при всяко извикване.

Има обаче ситуации, в които би било удобно да се създаде локална променлива, която „запомня“ стойността й между извикванията на функции. Такава променлива се нарича статична.

За да създадете статична променлива във функция, трябва да използвате ключовата дума static пред името на променливата и не забравяйте да й дадете начална стойност. Например:

Функция myFunction () (статична $ myVariable = 0;)

Нека разгледаме ситуация, когато е удобно да се използва статична променлива. Да предположим, че създавате функция, която при извикване създава джаджа и показва броя на вече създадените джаджи. Можете да опитате да напишете такъв код, като използвате локална променлива:


"; echo createWidget ()." вече създадохме.
"; echo createWidget ()." вече създадохме.>
"; ?>

Но тъй като променливата $ numWidgets се създава при всяко извикване на функцията, ще получим следния резултат:

Създаваме някои приспособления ... 1 вече сме създали. 1 вече сме създали. 1 вече сме създали.

Но използвайки статична променлива, можем да съхраняваме стойността от едно извикване на функция към следващото:

"; echo createWidget ()." вече създадохме.
"; echo createWidget ()." вече създадохме.
"; echo createWidget ()."> вече сме създали.
"; ?>

Сега скриптът ще генерира очаквания изход:

Създаваме някои приспособления ... 1 вече сме създали. 2, които вече създадохме. 3, които вече сме създали.

Въпреки че статичната променлива запазва стойността си между извикванията на функции, тя е валидна само в момента на изпълнение на скрипта. Веднага след като скриптът завърши изпълнението си, всички статични променливи се унищожават, както и локални и глобални променливи.

Това е всичко! Често проверявайте документацията на PHP.

Променливите на околната среда (среда) в Windows съдържат различна информация за системните настройки и потребителската среда. Разграничаване на променливите на потребителската, системната и процесна среда.

Най -лесният начин да видите съдържанието на променливите на средата в Windows е да отворите системните свойства ( sysdm.cpl) -> Разширени -> Променливи на околната среда.Както можете да видите, в отворения раздел има два раздела: горният съдържа променливите на обкръжението на потребителя, долният съдържа системните.

В допълнение, променливите на средата се съхраняват в системния регистър. Персонализираните променливи се съхраняват в раздела. Система - в HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment.

Можете да показвате стойностите на всички променливи на средата в командния ред на Windows. Командата е проста:

Командата ще изброи променливите на средата и техните стойности.

В PowerShell можете да използвате командата за показване на всички променливи на средата:

Ако искате да покажете стойността само на една променлива, трябва да използвате командата echo и името на променливата трябва да бъде затворено в знаци за процент. Например,

Echo% systemroot%

set> c: \ tmp \ env_var.txt

Променливите на околната среда на конкретен процес могат да бъдат получени с помощта на безплатна Помощни програми за Process Explorer(от Sysinternals). Достатъчно е да отворите свойствата на процеса и да отидете в раздела Заобикаляща среда.

Преди 13 години

Малко проблеми, за които трябва да внимавате:

Ако изключите RegisterGlobals и свързаните с него, след това използвайте get_defined_vars (), може да видите нещо подобно:

Масив
[GLOBALS] => Масив
[GLOBALS] => Масив
* РЕКУРСИЯ *
[_POST] => Масив ()
[_GET] => Масив ()
[_COOKIE] => Масив ()
[_FILES] => Масив ()
)

[_POST] => Масив ()
[_GET] => Масив ()
[_COOKIE] => Масив ()
[_FILES] => Масив ()

)
?>

Забележете, че $ _SERVER не е там. Изглежда, че php зарежда суперглобалния $ _SERVER само ако се използва някъде. Можете да направите това:

печат "

". htmlspecialchars (print_r (get_defined_vars (), true))."
" ;
печат "
". htmlspecialchars (print_r ($ _SERVER, true))."
" ;
?>

И тогава $ _SERVER ще се появи в двата списъка. Предполагам, че всъщност не е така, защото така или иначе нищо лошо няма да се случи, но въпреки това е интересно любопитство.

Преди 6 години

Тъй като get_defined_vars () получава само променливите в точката, в която извиквате функцията, има прост начин да получите променливите, дефинирани в текущия обхват.

// Самият връх на вашия php скрипт
$ vars = get_defined_vars ();

// Сега си вършете нещата
$ foo = "foo";
$ bar = "лента";

// Вземете всички променливи, дефинирани в текущия обхват
$ vars = array_diff (get_defined_vars (), $ vars);

ехо "

"
;
print_r ($ vars);
ехо "
" ;
?>

Преди 15 години

Ето функция, която генерира отчет за отстраняване на грешки за показване или имейл
използвайки get_defined_vars. Чудесно за получаване на подробна снимка без
разчита на въвеждане от потребителя.

функция generatedDebugReport ($ метод, $ defined_vars, $ email = "undefined") (
// Функция за създаване на отчет за отстраняване на грешки за показване или имейл.
// Използване: generatedDebugReport (метод, get_defined_vars (), имейл);
// Където методът е „браузър“ или „имейл“.

// Създаване на списък за игнориране на ключове, върнати от "get_defined_vars".
// Например HTTP_POST_VARS, HTTP_GET_VARS и други са
// излишно (същото като _POST, _GET)
// Включете и променливи, които искате да бъдат игнорирани от съображения за сигурност - т.е. PHPSESSID.
$ ignorelist = масив ("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");

$ timestamp = date ("m / d / y h: m: s");
$ message = "Отчет за отстраняване на грешки създаден $ timestamp \ n";

// Вземете последната SQL грешка за добра мярка, където $ link е идентификаторът на ресурса
// за mysql_connect. Коментирайте или променете за вашата база данни или настройка на абстракция.
глобална $ връзка;
$ sql_error = mysql_error ($ връзка);
ако ($ sql_error) (
$ message. = "\ nMysql съобщения: \ n". mysql_error ($ връзка);
}
// Край на MySQL

// Може да използва рекурсивна функция тук. Схващате идеята ;-)
foreach ($ defined_vars като $ key => $ val) (
if (is_array ($ val) &&! in_array ($ key, $ ignorelist) && count ($ val)> 0) (
$ message. = "\ n $ ключов масив (ключ = стойност): \ n";
foreach ($ val като $ subkey => $ subval) (
if (! in_array ($ подключ, $ ignorelist) &&! is_array ($ subval)) (
$ съобщение. = $ подключ. "=". $ subval. "\ н";
}
elseif (! in_array ($ подключ, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval като $ subsubkey => $ subsubval) (
if (! in_array ($ подподключ, $ ignorelist)) (
$ съобщение. = $ подключ. "=". $ подсубвал. "\ н" ;
}
}
}
}
}
иначе (!
is_array ($ val) &&! in_array ($ ключ, $ ignorelist) && $ val) (
$ message. = "\ nПроменлива". $ ключ. "=". $ val. "\ н";
}
}

Ако ($ метод == "браузър") (
echo nl2br ($ съобщение);
}
elseif ($ method == "имейл") (
if ($ email == "undefined") (
$ email = $ _SERVER ["SERVER_ADMIN"];
}

$ mresult = поща ($ email, "Отчет за отстраняване на грешки за". $ _ENV ["HOSTNAME"]. "", $ съобщение);
ако ($ mresult == 1) (
ехо "Отчет за отстраняване на грешки изпратен успешно. \ N";
}
иначе (
ехо „Неуспешно изпращане на отчет за отстраняване на грешки. \ N“;
}
}
}
?>

Преди 17 години

Проста рутина за преобразуване на обект get_defined_vars в XML.

функция obj2xml ($ v, $ indent = "") (
while (списък ($ key, $ val) = всеки ($ v)) (
if ($ key == "__attr") продължи;
// Проверете за __attr
if (is_object ($ val -> __attr)) (
while (списък ($ key2, $ val2) = всеки ($ val -> __attr)) (
$ attr. = "$ key2 = \" $ val2 \ "";
}
}
else $ attr = "";
ако (is_array ($ val) || is_object ($ val)) (
print ("$ indent< $key$attr >\ н ");
obj2xml ($ val, $ indent. "");
print ("$ indent\ н ");
}
else print ("$ indent< $key$attr >$ val\ н ");
}
}

// Примерен обект
$ x -> име -> първо = "Джон";
$ x -> име -> последно = "Смит";
$ x -> arr ["Fruit"] = "Bannana";
$ x -> arr ["Veg"] = "Морков";
$ y -> клиент = $ x;
$ y -> клиент -> __attr -> id = "176C4";

$ z = get_defined_vars ();
obj2xml ($ z ["y"]);
?>
ще изведе:


Джон
Смит


Банана
Морков

Преди 11 години

Като бележка, get_defined_vars () не връща набор от препратки към променливи (както се надявах). Например:

// дефинираме променлива
$ my_var = "foo";

// получаваме нашия списък с дефинирани променливи
$ defined_vars = get_defined_vars ();

// сега се опитайте да промените стойността чрез върнатия масив
$ defined_vars ["my_var"] = "лента";

ехо $ my_var, "\ n";

?>

ще изведе "foo" (първоначалната стойност). Би било хубаво, ако get_defined_vars () имаше незадължителен аргумент, за да ги направи препратки, но си представям, че това е доста специализирана заявка. Можете да го направите сами (по -малко удобно) с нещо като:

$ defined_vars = масив ();
$ var_names = ключове на масива (get_defined_vars ());

foreach ($ var_names като $ var_name)
{
$ defined_vars [$ var_name] = & $ $ var_name;
}

?>

Преди 1 година

Публикувах тук преди това „това“ да е в get_defined_vars.

Оказва се, че не винаги е там, но в определени случаи ще се появи необяснимо.

Php -r "
клас тест (
публична функция a () (var_dump (ключове на масива (get_defined_vars ())); $ a = 123;)
публична функция b () (var_dump (ключове на масива (get_defined_vars ())); $ this;)
}
$ t = нов тест ();
$ t-> a ();
$ t-> b ();
"

Масив ()
масив ("това")

Това не се случва в PHP 7.2, но ще се случи в PHP 5.6.

Преди 1 година

Някои коментари тук посочват, че тази функция няма да връща препратки. Той обаче връща имена и имената са "препратки".

Не бих препоръчал предложенията тук, които го превръщат в референции.

Публична функция x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) като $ ключ)
ако ($ ключ! == "това")
$ this-> y ($ ($ key));
}

Публична функция y (& $ вход) (
$ вход ++;
}

Вместо $ () можете да използвате и $$.

Направих някои странни неща за времето си, за да направя изключително общ код, но никога не съм се налагало да правя нещо подобно на горното. Може дори да не работи (но би трябвало, тъй като не се различава от $ a [$ ключ]).

Можете също така да направите $$ key ++, но никога не съм виждал код като този, който не беше ужасно лош (използвайки динамичен, където динамиката не е от полза).

Ако правите нещо подобно, дайте му допълнителен контрол.