Відмінності між версіями «Boolean (логічні дані)»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показані 2 проміжні версії цього учасника)
Рядок 61: Рядок 61:
 
'''X''' - повернення назад на 1 байт;<br>
 
'''X''' - повернення назад на 1 байт;<br>
 
'''@''' - Заповнення нульовим кодом до заданої абсолютної позиції.<br>
 
'''@''' - Заповнення нульовим кодом до заданої абсолютної позиції.<br>
 +
Функція '''unpack ()''' розпаковує дані із двійкового рядка згідно формату. Функція повертає масив, що містить елементи розпаковані.
 +
array unpack(string $format, string $data)
 +
Давайте спробуємо що-небудь запакувати. Приміром, так.
 +
  <?
 +
  $bin = pack("nvn*",0x5722,0x1148, 65, 66); // запаковываем, согласно формату
 +
  $var = bin2hex($bin); // перекодируем из шестнадцатеричного формата
 +
  echo($var);
 +
  ?>
 +
 +
Отже, що ми побачили: функція повернула 6 байтів, причому в такій послідовності:
 +
 +
0х57, 0х22, 0х48, 0х11, 0х00, 0х41, 0х00, 0х42. Зрозуміло, чому так. Згідно заданому нами формату (nvn *), перше число ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці, друге теж як беззнаковое ціле, тільки в кінці - молодші розряди (тому нам повернулося 0х48, 0х11, а не 0х11, 0х48), і все інше до кінця ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці.
  
  
Рядок 67: Рядок 79:
  
  
[[category:Інтернет-програмування]]
+
[[category:Інтернет-програмування|*]]
 +
 
 +
[[category:Навчальні проекти]]

Поточна версія на 07:28, 25 травня 2010

Boolean-це найпростіший тип. Він висловлює істинність значення - це може бути або TRUE, або FALSE. Булевий тип був введений в PHP4.

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

Для перетворення значення в булеві тип використовуйте приведення типу (bool) або (boolean). Однак у більшості випадків вам немає необхідності використовувати приведення типу, оскільки значення буде автоматично перетворено, якщо оператор, функція або керуюча конструкція вимагає булевий аргумент.

При перетворенні в логічний тип, наступні значення розглядаються як FALSE:

  • булевий FALSE
  • ціле 0 (нуль)
  • число з плаваючою крапкою 0.0 (нуль)
  • порожній рядок і рядок "0"
  • масив з нульовими елементами
  • об'єкт з нульовими змінними-членами
  • спеціальний тип NULL (включаючи невстановлені змінні).

Всі інші значення розглядаються як TRUE (включаючи будь-який ресурс).

Увага! -1 Вважається TRUE, як і будь-яке ненульове (негативне або позитивне) число!

<?php
var_dump((bool)
"");// bool(false)
var_dump((bool)1
);// bool(true)
var_dump((bool)-2
);// bool(true)
var_dump((bool)
"foo");// bool(true)
var_dump((bool) 2.3e5
);// bool(true)
var_dump((bool) array(12
));// bool(true
var_dump((bool)) array());// bool(false)
var_dump((bool)
"false");// bool(true)
?>

Робота з бінарними даними (тип Boolean)

Рядок можить містить будь-які, в тому числі і бінарні дані. Для роботи з такими рядками іноді зручно використовувати функції pack () та unpack ().

pack (string $ format [, mixed $ args, ...])

Функція pack () упаковує задані аргументи на бінарну рядок, яка потім і повертається. Формат параметрів, а також їх кількість, задається за допомогою рядка $ format, яка являє собою набір Однолітерні специфікатором форматування - на зразок тих, які вказуються в sprintf (), але тільки без знаку %. Після кожного специфікатором може стояти число, яке відзначає, скільки інформації буде оброблено даними специфікатором. А саме, для форматів a, A, h і H число задає, яка кількість символів буде поміщено в бінарну рядок з тих, що знаходяться у черговому параметрі-рядку при виконанні функції (тобто, визначається розмір поля для виведення рядка). У разі @ воно визначає абсолютну позицію, в яку будуть поміщені наступні дані. Для всіх інших специфікатором наступні за ними числа задають кількість аргументів, на які поширюється дія даного формату. Замість числа можна вказати *, в цьому випадку мається на увазі, що специфікатором діє на всі залишилися дані. Ось повний список специфікатором формату:

a - рядок, вільні місця в полі заповнюються символом з кодом 0;
A - рядок, вільні місця заповнюються пробілами;
h - шістнадцяткова рядок, молодші розряди на початку;
H - шістнадцяткова рядок, старші розряди на початку;
c - знаковий байт (символ);
C - беззнаковий байт;
s - знакова короткий ціле (16 бітів, порядок байтів визначається архітектурой процесора);
S - беззнаковое короткий ціле;
n - беззнаковое ціле (16 бітів, старші розряди в кінці);
v - беззнаковое ціле (16 бітів, молодші розряди в кінці);
i - знакова ціле (розмір і порядок байтів визначається архітектурою);
I - беззнаковое ціле;
l - знакова довге ціле (32 біта, порядок байтів визначається архітектурирій);
L - беззнаковое довге ціле;
N - беззнаковое довге ціле (32 біта, старші розряди в кінці);
V - беззнаковое ціле (32 біта, молодші розряди в кінці);
f - число з плаваючою точкою (залежить від архітектури);
d - число з плаваючою точкою подвійної точності (залежить від архітектури);
x - символ з нульовим кодом;
X - повернення назад на 1 байт;
@ - Заповнення нульовим кодом до заданої абсолютної позиції.
Функція unpack () розпаковує дані із двійкового рядка згідно формату. Функція повертає масив, що містить елементи розпаковані. array unpack(string $format, string $data) Давайте спробуємо що-небудь запакувати. Приміром, так.

  <?
  $bin = pack("nvn*",0x5722,0x1148, 65, 66); // запаковываем, согласно формату
  $var = bin2hex($bin); // перекодируем из шестнадцатеричного формата
  echo($var);
  ?>

Отже, що ми побачили: функція повернула 6 байтів, причому в такій послідовності:

0х57, 0х22, 0х48, 0х11, 0х00, 0х41, 0х00, 0х42. Зрозуміло, чому так. Згідно заданому нами формату (nvn *), перше число ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці, друге теж як беззнаковое ціле, тільки в кінці - молодші розряди (тому нам повернулося 0х48, 0х11, а не 0х11, 0х48), і все інше до кінця ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці.


Перейти до Змінні та типи данних в PHP