Воскресенье, 22.12.2024, 22:39
Меню сайта
Категории раздела
JQuery плагины [59]
JQuery уроки [69]
PHP полезное [24]
PHP уроки [21]
Css [26]
JS [3]
SQL [9]
Css 3 [17]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » PHP уроки

Типы
        

Введение

        
            
                

Вернуться к: Типы

            
               

   PHP поддерживает восемь простых типов. 

   

   Четыре скалярных типа: 

 
      
  •          boolean      
  •   
  •          integer      
  •   
  •          float (число с плавающей точкой, также известное как double)      
  •   
  •          string      
  •  
 

   Два смешанных типа: 

 
      
  •          array      
  •   
  •          object      
  •  
 

   И, наконец, два специальных типа: 

 
      
  •          resource      
  •   
  •          NULL      
  •  
 

  Для удобства понимания в этом руководстве используется также несколько   псевдотипов

 
       
  •          mixed      
  •    
  •          number      
  •    
  •          callback      
  •  
 

   И псевдопеременная $...

 

   Вы также можете найти несколько упоминаний типа двойной точности (double).   Рассматривайте его как число с плавающей точкой, два имени существуют только   по историческим причинам. 

   

   Как правило, программист не устанавливает тип переменной;   обычно это делает PHP во время выполнения программы в   зависимости от контекста, в котором используется переменная. 

 

Замечание:        Если вы желаете проверить тип и значение определённого выражения, используйте    var_dump().     

    Если же вам для отладки необходимо просто удобочитаемое представление    типа, используйте gettype(). Чтобы проверить на    определенный тип, не используйте gettype(),    применяйте для этого is_type    функции. Вот несколько примеров:  

  
   
$a_bool TRUE;   // логический
$a_str  "foo";  // строковый
$a_str2 'foo';  // строковый
$an_int 12;     // целочисленный

echo gettype($a_bool); // выводит: boolean
echo gettype($a_str);  // выводит: string

// Если это целое, увеличить на четыре
if (is_int($an_int)) {
    
$an_int += 4;
}

// Если $a_bool - это строка, вывести ее
// (ничего не выводит)
if (is_string($a_bool)) {
    echo 
"Строка: $a_bool";
}
?>
   
  
 

 

   Если вы хотите принудительно изменить тип переменной, вы можете либо   привести   переменную, либо использовать функцию settype()

 

   Обратите внимание, что переменная, в зависимости от ее типа в данный   момент, в определённых ситуациях может иметь разные значения.   Более подробную информацию смотрите в разделе Манипуляции с типами.   Также вам, возможно, будет интересно посмотреть   таблицы сравнения типов,     поскольку в них приведены примеры различных сравнений, связанных с типами. 

             

            

Вернуться к: Типы

        
    
       

Булев

       
           
               

Вернуться к: Типы

           
             

  Это простейший тип. boolean выражает истинность значения. Он  может быть либо TRUE либо FALSE

 
 

Синтаксис

 

   Для указания boolean, используйте ключевое слово TRUE или   FALSE. Оба регистро-независимы. 

 
  
$foo True// присвоить $foo значение TRUE
?>
  
 
 

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

 
  
// == это оператор, который проверяет
// эквивалентность и возвращает boolean
if ($action == "show_version") {
    echo 
"The version is 1.23";
}

// это необязательно...
if ($show_separators == TRUE) {
    echo 
"
\n"
;
}

// ... потому что следующее имеет тот же самый смысл:
if ($show_separators) {
    echo 
"
\n"
;
}
?>
  
 
 
 
 

Преобразование в булев тип

 

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

 

   Смотрите также Манипуляции с типами

 

   При преобразовании в boolean, следующие значения рассматриваются как   FALSE

 
      
  •          само значение boolean FALSE      
  •   
  •          integer 0 (ноль)      
  •   
  •          float 0.0 (ноль)      
  •   
  •          пустая строка, и     строка "0"      
  •   
  •          массив без элементов      
  •   
  •          объект без полей     (только для PHP 4)      
  •   
  •          особый тип NULL (включая     неустановленные переменные)      
  •   
  •          Объекты SimpleXML, созданные из пустых тегов      
  •  
 

   Все остальные значения рассматриваются как TRUE (включая любой   resource). 

 
Внимание  

    -1 рассматривается как TRUE, как и любое другое ненулевое    (отрицательное или положительное) число!  

 
 
  
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)
?>
  
 
 
           

           

Вернуться к: Типы

       

Целые числа

Integer - это число из множества ℤ = {..., -2, -1, 0, 1, 2, ...}.

Смотрите также:

Синтаксис

Целые числа могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) системе счисления, с необязательным предшествующим знаком (- или +).

Двоичная запись integer доступна начиная с PHP 5.4.0.

Для записи в восьмеричной системе счисления, необходимо поставить пред числом 0 (ноль). Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x. Для записи в двоичной системе счисления, необходимо поставить перед числом 0b

Пример #1 Целые числа

$a 1234// десятичное число
$a = -123// отрицательное число
$a 0123// восьмеричное число (эквивалентно 83 в десятичной системе)
$a 0x1A// шестнадцатеричное число (эквивалентно 26 в десятичной системе)
?>

Формально, структуру целых чисел можно записать так:

десятичные : [1-9][0-9]*
 | 0

шестнадцатеричные : 0[xX][0-9a-fA-F]+

восьмеричные : 0[0-7]+

двоичные : 0b[01]+

целые : [+-]?десятичные
 | [+-]?шестнадцатеричные
 | [+-]?восьмеричные
 | [+-]?двоичные

Размер integer зависит от платформы, хотя, как правило, максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые. С версии PHP 4.4.0 и PHP 5.0.5 размер integer может быть определен с помощью константы PHP_INT_SIZE, а его максимальное значение - с помощью константы PHP_INT_MAX.

Внимание

Если в восьмеричном integer будет обнаружена неверная цифра (например, 8 или 9), оставшаяся часть числа будет проигнорирована.

Пример #2 Странности с восьмеричными числами

var_dump(01090); // 010 octal = 8 decimal
?>

Переполнение целых чисел

Если PHP обнаружил, что число превышает размер типа integer, он будет интерпретировать его в качестве float. Аналогично, если результат операции лежит за границами типа integer, он будет преобразован в float.

Пример #3 Переполнение целых на 32-битных системах

$large_number 2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number 2147483648;
var_dump($large_number);                     // float(2147483648)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);                     // float(50000000000)
?>

Пример #4 Переполнение целых на 64-битных системах

$large_number 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million 1000000;
$large_number =  50000000000000 $million;
var_dump($large_number);                     // float(5.0E+19)
?>

В PHP не существует оператора деления целых чисел. Результатом 1/2 будет float 0.5. Если привести значение к integer, оно будет округлено вниз. Для большего контроля над округлением используйте функцию round().

var_dump(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>

Преобразование в целое

Для явного преобразования в integer, используйте приведение (int) или (integer). Однако, в большинстве случаев, в приведении типа нет необходимости, так как значение будет автоматически преобразовано, если оператор, функция или управляющая структура требует аргумент типа integer. Значение также может быть преобразовано в integer с помощью функции intval().

Смотрите также: Манипуляции с типами.

Из булевого типа

FALSE преобразуется в 0 (ноль), а TRUE - в 1 (единицу).

Из чисел с плавающей точкой

При преобразовании из float в integer, число будет округлено в сторону нуля.

Если число с плавающей точкой превышает размеры integer (обычно +/- 2.15e+9 = 2^31 на 32-битных системах и +/- 9.22e+18 = 2^63 на 64-битных системах), результат будет неопределенным, так как float не имеет достаточной точности, чтобы вернуть верный результат. В этом случае не будет выведено ни предупреждения, ни даже замечания!

Внимание

Никогда не приводите неизвестную дробь к integer, так как это иногда может дать неожиданные результаты.

echo (int) ( (0.1+0.7) * 10 ); // выводит 7!
?>

Смотрите более подробно: предупреждение о точности чисел с плавающей точкой.

Из других типов

Предостережение

Для других типов поведение преобразования в integer не определено. Не полагайтесь на любое наблюдаемое поведение, так как оно может измениться без предупреждения.


Числа с плавающей точкой

Числа с плавающей точкой (также известные как "float", "double", или "real") могут быть определены следующими синтаксисами:

$a 1.234
$b 1.2e3
$c 7E-10;
?>

Формально:

LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Размер числа с плавающей точкой зависит от платформы, хотя максимум, как правило составляет ~1.8e308 с точностью около 14 десятичных цифр (64-битный IEEE формат).

Внимание

Точность чисел с плавающей точкой

Числа с плавающей точкой имеют ограниченную точность. Хотя это зависит от операционной системы, в PHP обычно используется формат двойной точности IEEE 754, дающий максимальную относительную ошибку округления порядка 1.11e-16. Неэлементарные арифметические операции могут давать большие ошибки, и, разумеется, необходимо принимать во внимание распространение ошибок при совместном использовании нескольких операций.

Кроме того, рациональные числа, которые могут быть точно представлены в виде чисел с плавающей точкой с основанием 10, например, 0.1 или 0.7, не имеют точного внутреннего представления в качестве чисел с плавающей точкой с основанием 2, вне зависимости от размера мантиссы. Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....

Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и никогда не проверяйте их на равенство. Если вам действительно необходима высокая точность, используйте математические функции произвольной точности и gmp-функции.

Преобразование в число с плавающей точкой

Информацию о преобразовании строк в числа с плавающей точкой смотрите в разделе Преобразование строк в числа. Для значений других типов преобразование будет сначала осуществлено в в integer и затем в число с плавающей точкой. Дополнительную информацию смотрите в разделе Преобразование к целому. Начиная с версии PHP 5, при преобразовании объекта к числу с плавающей точкой выводится замечание об ошибке.

NaN

Некоторые числовые операции могут возвращать значение, представляемое константой NAN. Данный результат означает неопределенное или непредставимое значение в операциях с плавающей точкой. Любая строгое или нестрогое сравнение данного значения с другим значением, включая его самого, возвратит FALSE.

Так как NAN представляет собой неограниченное количество различных значений, то NAN не следует сравнивать с другими значениями, включая ее саму. Вместо этого, для определения ее наличия необходимо использовать функцию is_nan().

Категория: PHP уроки | Добавил: ChronoW (20.11.2012)
Просмотров: 805 | Теги: Типы php | Рейтинг: 0.0/0
Всего комментариев: 0