Змінні та типи данних в PHP

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Типи данних

Змінна - це літерно-символьне подання частини інформації, яка перебуває в пам'яті в Web-сервера.

В php змінна виглядає ось так:

$names="я інформація в пам'яті тчк";

Імена змінних
     Будь-яка змінна в PHP має ім'я, що починається із знаку $, наприклад $variable. Людям, які звикли до C/С++-подібним мовам цей принцип іменування змінних може здатися дивним, але насправді такий підхід має певні переваги. При такому способі формування імен змінних їх дуже легко відрізнити від іншого коду. Якщо в інших мовах інколи може виникати плутанина з тим, що при першому погляді на код не завжди ясно - де тут змінні, а де функції, то в PHP це питання навіть не постає. Даний принцип дозволяє дуже просто і елегантно реалізувати функціональність, просто недоступну інакше. Наприклад, ссилка на змінну по її імені, що зберігається в іншій змінній:

$name = "value";
$value = 5;
echo $$name;

     В даному прикладі PHP виведе результат 5. Такі фокуси стали можливі із-за закладеного в PHP принципу: “anything is an expression” (будь-яка річ є виразом). Виходячи з цього PHP сприймає вираз $$name таким чином: парсер зустрічає символ $, а це означає, що наступний вираз є ім'ям змінної. Парсер зустрічає ще один символ $, і продовжує пошуки імені вже іншій змінній, значення якої необхідне для обчислення значення попереднього виразу. Парсер отримує ім'я name, знаходить змінну з таким ім'ям, бере її значення (‘value’) і повертається назад. Оскільки на попередньому кроці ми шукали ім'я змінної, те значення тільки що обчисленого виразу сприймається саме як ім'я змінної. Парсер шукає змінну з таким ім'ям (value) і повертає її результат (5). Як бачите, це дуже гнучка система і при невеликому тренуванні ви зможете творити дива з її допомогою! Адже так само можна оперувати з будь-якими елементами мови, що мають ім'я, тобто наприклад викликати метод класу по його імені, що міститься в змінній.

     Змінні в PHP представляються у вигляді рядка, що починається знаком долара, а за ним слідує ім'я змінної. Ім'я змінної може складатися з латинських літер, звичайних цифр і деяких символів або комбінацій літер, цифр і символів. Воно є чутливим до регістра й не може починатися з цифри.

Всі змінні діляться на певні типи:

Мова JavaScript містить шість типів даних Undefined(невизначений), Null (нульовий), Boolean (логічний), String (строковий), Number (числовий) і Object (об'єктний). Ця відносно невелика кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій.

Тип Undefined (невизначений)

Цей тип складається з єдиного значення undefined. Це значення, яке приймає змінна, яка оголошена в програмі, але якої ще не присвоєно ніякого значення.

Тип Null (нульовий)


Спеціальне значення NULL говорить про те, що змінна не має значення. Змінна вважається NULL, якщо:

їй була присвоєна константа NULL ($var = NULL); 
їй ще не було присвоєно яке-небудь значення; 
вона була вилучена за допомогою unset(). 


Існує тільки одне значення типу NULL – регістронезалежне ключове слово NULL.
Цей тип складається з єдиного значення null. Це значення означає нульове, порожне або неіснуюче посилання.

Змішані типи даних

     До змішаних типів належать масиви, хеші та об'єкти. Масиви в сенсі мови є наборами змінних, що згруповані в єдину змінну. Вимога однотипності наповнення масивів не ставиться. Технічно, масиви - це впорядковані карти, що відображають ключові значення на позиції змінних даних. Вмістом значення, на яке вказує ключ може бути будь-чим, що можна подати у вигляді змінної. Не існує жодних обмежень, крім об'єму пам'яті, що накладаються на кількість ключів масиву.

     Особливістю мови є відмова від рівномірного розподілу ключів масивів. Реалізовано і модель багатовимірних масивів, причому без явного обмеження глибини вкладеності. Корисною властивістю PHP є можливість асоціації масивів із функцією зворотного виклику. Ці функції дозволяють проводити дії над одним чи кількома масивами в пакетному режимі.

     Також, існують два спеціальні типи даних — ресурс та NULL. Ресурс — спеціальна змінна, що містить посилання на зовнішній ресурс. Ресурси створюються та використовуються в спеціалізованих функціях. Оскільки тип містить спеціальні вказівники на відкриті файли, під'єднання та інше, то будь-які дії над значенням ресурсу не мають сенсу.

     Область видимості змінної — середовище, в якій вона визначена. Розрізняють локальні та глобальні змінні. За замовчуванням, всі змінні мають локальний характер дії. Виділяють особливий тип змінних — статичні, що дозволяє повторне звернення до змінної в певному сегменті коду, причому змінна буде зберігати попередньо отримане значення. Існує також поняття суперглобальних змінних, які є місцем збереження даних оточення або даних, отриманих ззовні. Підтримується концепція динамічних змінних та функцій.

     Константи в PHP — ідентифікатори простих значень. Можливе визначення константи, причому після її оголошення стає неможливою зміна її значення чи анулювання. Константи можуть мати лише скалярні значення. Підтримується можливість отримання значення константи за динамічним ім'ям. Область видимості констант буде глобальною для сценарію та всіх під'єднаних компонентів. Також в ядрі мови визначено чимало системних констант.

В PHP значення змінних може бути отримане в такий спосіб:

1. заздалегідь визначено web-програмістом;
2. отримано в результаті виконання веб-сервером функцій/операцій;
3. отримано через запит браузера методом Get або Post.

     Останній варіант і використовується для створення інтерактивного спілкування сторінки сайту з відвідувачем. Вибираючи той або інший варіант відповіді, вводячи інформацію в поля, або ми просто хочемо запам'ятати обрані настроювання користувачем програмістами використовуються методи Get або Post для відправлення/отримання запитів з інформацією.

Період дії(існування) змінних

     Змінні в PHP існують тільки на час виконання користувачем одного запиту до сервера. Це означає, що коли користувач заходить на головну сторінку сайту, а з неї переходить на внутрішню сторінку, то всі змінні, які були створені при створенні головної сторінки не передаються далі, а при новому запиті створюються заново.

     Якщо, наприклад, меню сайту перебуває в базі даних MySQL, то при кожному запиті користувача (переходу зі сторінки на сторінку) web-сервер, виконуючи код PHP, буде запитувати з бази даних інформацію з меню й заносити її в одну й ту саму змінну.

     Чому ж тоді всі сторінки різні, якщо всі змінні починаються з нуля? Тому що, коли користувач натискає на посилання він передає web-серверу змінну з певним значенням. А web-сервер, щоразу при виконанні коду PHP перевіряє на існування змінної з певним значенням і якщо вона існує, то виконує певний сценарій. І в результаті ви отримуєте іншу сторінку. Так як, web-сервер виконав код PHP по іншому сценарію.


Перетворення типів


Тип змінної залежить від того, який тип інформації в ній зберігається. Javascript не є жорстко типізованим мовою. Це означає, що ви не повинні точно визначати тип даних змінної, у момент її створення. Тип змінної привласнюється змінної автоматично протягом виконання скрипта. Так, наприклад, ви можете визначити змінну в такий спосіб:

var answer=42


А пізніше, ви можете привласнити тієї ж змінн значення, що наприклад випливає:

answer="Thanks for all the fish..." 


Або розглянемо наступне вираження:

var onestring="1"
var oneint=1
var oneconcatenate=onestring+oneint
// У результаті виходить "11"
var oneaddition=oneint+onestring
// У результаті виходить 2 


У першій операції додавання перший операнд є рядком. Javascript припускає, що проводиться операція із двома рядками. Коли Javascript виявляє в якості другого операнда ціле число, він у відповідності зі своїми виставами перетворить змінну в рядок.
Оскільки Javascript вільно типізований мова, те це не викличе помилки.
Тому що Javascript не підтримує ніяких методів і властивостей для визначення типу поточного значення змінної, дуже важливо внимательноотслеживать типи змінних щоб уникнути несподіваних результатів.
Взагалі, у вираженнях строкові значення, що включають числові й, Javascript перетворює числові значення в строкові. Наприклад, розглянемо наступні твердження:

x="The answer is " + 42
y=42 + " is the answer."


Перше твердження буде рядок "The answer is - 42 ".
Друге твердження повертає рядок " 42 - The answer is". 

Javascript надає кілька спеціальних функцій для керування строковими й числовими значеннями: eval обчислює рядок, що представляє будь-які Javascript літерали або змінні, перетворюючи її в число.
parseint перетворює рядок у ціле число в зазначеній підставі системи числення, якщо можливо. parsefloat перетворює рядок у число із плаваючою крапкою, якщо можливо.


JavaScript - слаботипізованнa мовa. Це означає, що в декларації змінної ми не вказуємо її тип і надалі можемо привласнювати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних в міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object та String.

Приведение типов

Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной. Пример:

<?php
$foo
= 10; // $foo это целое число
$bar = (boolean) $foo; // $bar это булев тип
?>

Допускаются следующие приведения типов:

  • (int), (integer) - приведение к целому числу

  • (bool), (boolean) - приведение к булеву типу

  • (float), (double), (real) - приведение к числу с плавающей точкой (float)

  • (string) - приведение к строке

  • (array) - приведение к массиву

  • (object) - приведение к объекту

Обратите внимание, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующее равносильно по своему действию:

<?php
$foo
= (int) $bar;
$foo = ( int ) $bar;
?>

Совет: вместо приведения переменной к строке, вы можете заключить ее в двойные кавычки.

<?php
$foo
= 10; // $foo это целое число
$str = "$foo"; // $str это строка
$fst = (string) $foo; // $fst это также строка

// Это напечатает "они одинаковы"
if ($fst === $str) {
echo
"они одинаковы";
}
?>

Перетворення типів відбуваються за наступними правилами.

Перетворення до логічного типу

Вихідний тип Результат
Undefined false
Null false
Boolean без змін
Number false, якщо аргумент рівен +0, -0 або NaN; true в інших випадках
String false, якщо аргумент — порожній рядок; true в інших випадках
Object true

Перетворення до логічного типу в PHP


Перетворення до числового типу

Вихідний тип Результат
Undefined NaN
Null +0
Boolean 1, якщо аргумент рівен true, і 0, якщо аргумент рівен false
Number без змін
String якщо рядок містить правильне число (можливо з пробілами перед та / або після нього), то це число; NaN в іншому випадку
Object результат перетворення значення об'єкта за замовчуванням

Перетворення до рядкового типу

Вихідний тип Результат
Undefined "undefined"
Null "null"
Boolean "true", якщо аргумент рівен true, і "false", якщо аргумент рівен false
Number текстове представлення числа (див. нижче)
String без змін
Object результат перетворення значення об'єкта за замовчуванням

Перетворення числа n у рядок відбувається за такими правилами:

  • якщо n рівне NaN, то результат "NaN";
  • якщо n рівне +0 або -0, то результат "0";
  • якщо n відємне, то результат буде конкатенацією рядка "-" і результату перетворення в рядок числа -n;
  • якщо n рівне некінченності, то результат "Infinity";
  • в інших випадках нехай m, k и s — такі цілі числа, що k >= 1, 10k-1 <= s < 10k, n рівне s x 10m-k и k — найменьше з можливих. Відмітемо, що k — це кількість цифр у десятковому представленні s , що s не діляться на 10 і що найменш значуща цифра s може не бути однозначно визначеною. Тоді
  • якщо k <= m <= 21, то результат складається з k десятичних цифр s (без провідних нулів), за якими йдуть m-k символів '0';
  • інакше, якщо 0 < m <= 21, то результат складається з m старших десяткових цифр s, за якими слідує десяткова точка '.' і k-m залишившихся десяткових цифр s;
  • інакше, якщо -6 < m <= 0, то результат складається з символа '0', за якими слідує десяткова точка '.', -m символів '0' і k десяткових цифр s;
  • інакше, якщо k = 1, то результат складається з єдиною цифри s, символа 'e', символа плюс '+' або мінус '-' в залежності від того, додатнє чи відємне m-1, за якими слідує десяткове представлення числа abs(m-1);
  • інакше результат складається з старшої десяткового цифри s, за якою слідує десяткова точка '.' и k-1 залишившихся десяткових цифр s, символ 'e', символ плюс '+' або мінус '-' в залежності від того, додатнє чи відємне m-1, за якими слідує десяткове представлення числа abs(m-1).

Перетворення до рядкового типу в PHP


Перетворення до об'єктного типу

Вихідний тип тип Результат
Undefined генерується виключення TypeError
Null генерується виключення TypeError
Boolean новий логічний об'єкт з даними значенням за замовчуванням
Number новий логічний об'єкт з даними значенням за замовчуванням
String новий рядковий об'єкт з даними значенням за замовчуванням
Object без змін


Приклади неявних перетворень

У виразах, що з'єднують числові і рядкові значення операцією +, JavaScript перетворює числа в рядки, наприклад:

x = "Відповідь дорівнює " + 21  // повертає "Відповідь дорівнює 21"
y = 21 + "  - ось відповідь" // повертає "21 - ось відповідь"

В інших випадках JavaScript намагається перетворити рядок в число, наприклад:

a = "21" - 1 // повертає 20
b = "21" + 1 // повертає 211

Змінні

Ви використовуєте змінні, щоб зберігати значення у вашому додатку. Ви даєте цим змінним імена, по яких ви посилаєтеся на них, і існують деякі правила, яким імена повинні відповідати.

Ідентифікатор Javascript або ім'я повинні початися із символу або символом підкреслення ("_"); послідовність символів також можуть бути цифри (0-9). Символи включають знаки з "A" до "Z" (верхнього регістру) і знаки з "a" до "z" (нижній регістр). Javascript ураховує регістр.

Деякі приклади припустимих імен:

Number_hits 
temp99 
_name 


Область дії змінних
Область дії змінних - те, де ви можете використовувати їх у скрипте. В Javascript, існує дві області дії, які змінні можуть мати:
Глобальна: Ви можете використовувати змінну де-небудь у додатку. Локальна: Ви можете використовувати змінну усередині поточної функції.
Щоб оголосити локальну змінну усередині функція, використовуйте ключове слово var,
наприклад:

var total=0; 

Щоб оголосити глобальну змінну, оголосите змінну призначення, яка просто привласнює значення змінної (або у функції або поза функцією),
наприклад:

total=0; 

Найкраще повідомляти глобальні змінні на початку вашого скрипта, так, щоб функції успадковували змінну і її значення.

Літерали

Літерали - спосіб, яким ви представляєте значення в Javascript. Установлені значення, які ви буквально (literally) представляєте у вашому джерелі, і - не змінні.
Приклади літералів включають:

42 
3.14159 
"Бути або не бути" 

Цілі числа (Integers)
Цілими називають числа виду 1, 164, 102390. Вони можуть бути виражені в десятковому ( по підставі 10), шестнадцатеричном ( по підставі 16), або восьмеричному ( по підставі 8) виставі. Десятковий літерал цілого числа складається з послідовності цифр без уведення 0 (нуля).
Ціле число може бути виражене у восьмеричному або шестнадцатеричном скоріше чому в десятиричное. Шестнацетеричные числа включають цифри 0-9 і букви a-f і A-F, в Javascript вони записуються з комбінацією символів 0x або 0X (нуль-x) перед числом. Восмиричные числа включають тільки цифри 0-7 і в Javascript записуються із провідного нуля.
Наприклад:

десяткове число 23 представляється в шестнадцатеричном виді як 0x17 і у восмеричном як    
027 

Літерали із плаваючою крапкою

Літерали із плаваючою крапкою являють собою дробові частини цілих чисел і повинні містити в собі принаймні одну цифру й десяткову крапку або символ експоненти ("е" або "Е"). У наступних прикладах наведені різні варіанти вистави того самого числа:

3.1415927 
31415927е-7 
.31415927Е1 

Логічні літерали
Логічні значення мають тільки два значення, дійсна (true) або неправда (false). У деяких реалізаціях мови Javascript 0 (false) і 1 (true) не можуть бути використані в якості логічних значень.
Рядка
Строкові літерали - нуль або більша кількість знаків, располеженные в подвійні (") або одинарних (') лапках. Рядки повинен бути розділені лапками того ж самого типу; тобто або обидві одинарні лапки або подвійні лапки. Використання зворотної подвійної риси "" дозволяє вставляти в рядок спеціальні символи. Приведемо приклади строкових літералів:

"Blah" 
'Blah' 
"1234" 
"one line another line" 

Спеціальні символи

Ви можете використовувати наступні спеціальні символи в строкових литаралах Javascript:

вказує повернення на один символ. 
f вказує переклад сторінки. 
вказує нову цифру(знак) лінії. 
вказує повернення каретки. 
вказує cимвол табуляції. 


Символи виходу
Ви можете вставляти лапок усередині рядка, передуючи їм похилою рисою вліво. Це відомо як вихід лапок.
Наприклад

document.write("" Вам слід прийняти ванну",- сказав доктор і наморщив ніс.");

виводить

" Вам слід прийняти ванну", 
- сказав доктор і наморщив ніс


Декларація змінних

Змінні використовуються в якості символічних імен, які приймають різні значення. Імена змінних задаються ідентифікаторами. Змінна створюється в момент її декларації. JavaScript дозволяє декларувати змінну двома способами:

  • За допомогою ключового слова var, наприклад, var x; або var x = 21;.
  • Просто присвоюванням змінній значення, наприклад x = 21;.

Якщо декларація змінної не містить присвоювання їй значення, то її значенням вважається undefined. Ми можемо перевіряти, визначено Чи має значення змінної, і вживати відповідні дії. Приклад:

var text;
if (text == undefined)
  document.write("Текст не задан");
else
  document.write("Текст:" + text);

В этом примере значение переменной text не определено, поэтому будет выполнен первый оператор document.write.

В самом общем виде декларация переменных имеет вид:

var идентификатор[=инициализатор]?[,идентификатор[=инициализатор]?]?

Здесь инициализатор — это любое выражение, значение которого присваивается переменной при ее создании. Пример:

var a = 0, b, c = "текст", x, y = false;

Область действия переменных

Область действия переменной определяется положением ее декларации в тексте программы. Существуют три типа исполняемого кода JavaScript, называемых контекстом исполнения:

  • Глобальный контекст, т. е. исходный текст сценариев, не включая тела функций.
  • Локальный контекст, т. е. исходный текст сценариев, являющийся телом функции, а также аргумент конструктора встроенного объекта Function. Точнее говоря, если последним параметром конструктора Function является строка текста, то она интерпретируется как тело функции.
  • Eval-контекст, т. е. аргумент метода eval. Если параметром метода eval является строка текста, то она интерпретируется как программа на языке JavaScript, имеющая тот же контекст, в котором был вызван этот метод.

Иными словами, любая переменная, декларированная вне тела всех функций, является глобальной и доступна всюду в тексте данной программы. Переменная, декларированная в теле функции, является локальной и доступна только внутри тела этой функции. Об особенностях eval-контекста см. описание метода eval.

Для декларации глобальных переменных ключевое слово var не обязательно. Однако, оно обязательно при декларации локальных переменных.


Перейти до Інтернет-програмування