Указание типа переменной php
Casting objects to arrays is a pain. Example:
$test = new MyClass ();
echo ‘
/*
Array
(
[MyClasspriv] => priv_value
[*prot] => prot_value
[pub] => pub_value
[MyClasspriv] => second_pub_value
)
*/
?>
Yes, that looks like an array with two keys with the same name and it looks like the protected field was prepended with an asterisk. But that’s not true:
/*
MyClasspriv (13) => priv_value
0 77 121 67 108 97 115 115 0 112 114 105 118
*prot (7) => prot_value
0 42 0 112 114 111 116
pub (3) => pub_value
112 117 98
MyClasspriv (11) => second_pub_value
77 121 67 108 97 115 115 112 114 105 118
*/
?>
The char codes show that the protected keys are prepended with ‘\0*\0’ and private keys are prepended with ‘\0’.__CLASS__.’\0′ so be careful when playing around with this.
The object casting methods presented here do not take into account the class hierarchy of the class you’re trying to cast your object into.
Value of uninitialized variable of different data types.
settype($a,’bool’);
var_dump($a); //boolean false
settype($b,’string’);
var_dump($b); //string » (length=0)
settype($c,’array’);
var_dump($c); //array (size=0) empty
settype($d,’int’);
var_dump($d); //int 0
settype($e,’float’);
var_dump($e); //float 0
You REALLY must be aware what you are doing, when you cast a lot in your code. For example, you can accidentaly change FALSE to TRUE (probably not in one line, like here):
if(TRUE === (boolean) (array) (int) FALSE) <
kaboom();
>
namaroulis stated «I found it tricky to check if a posted value was an integer»; to test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric():
in response to bhsmither at gmail.com
It raises a warning because of the bad enquoted variable
It seems (unset) is pretty useless. But for people who like to make their code really compact (and probably unreadable). You can use it to use an variable and unset it on the same line:
?>
With the unset cast:
?>
Hoorah, we lost another line!
Checking for strings to be integers?
How about if a string is a float?
/* When checking for floats, we assume the possibility of no decimals needed. If you MUST require decimals (forcing the user to type 7.0 for example) replace the sequence:
2+(\.1+)?
with
6+\.1+
*/
Указание типа переменной php
PHP поддерживает восемь простых типов данных (переменных):
Существуют также несколько :
Рассмотрим кратко перечисленные типы данных PHP.
Тип Boolean (двоичные данные)
Чтобы определить булев тип, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.
Обычно вы используете некий оператор, который возвращает логическое выражение, а затем предает его управляющей конструкции.
Подробнее о булевых типах данных смотрите здесь.
Тип integer (целые числа)
Целые могут быть указаны в десятичной, шестнадцатеричной или восьмеричной системе счисления, по желанию с предшествующим знаком (- или +).
Подробнее о типах данных смотрите здесь.
Тип float (числа с плавающей точкой)
Числа с плавающей точкой (они же числа двойной точности или действительные числа) могут быть определены при помощи любого из следующих синтаксисов:
Подробнее о типах данных смотрите здесь.
Тип string (строки)
Строка легко может быть обработана при помощи стандартных функций, можно также непосредственно обратиться к любому ее символу.
Пример строковой переменной:
Подробнее о типах данных смотрите здесь.
Тип array (массивы)
Индекс (ключ) служит для однозначной идентификации элемента внутри массива. В одном массиве не может быть двух элементов с одинаковыми индексами.
PHP позволяет создавать массивы любой сложности. Рассмотрим некоторые примеры:
Простой массив (список)
Ассоциативные массивы
В PHP индексом массива может быть не только число, но и строка. Причем на строку не накладываются ограничения: она может содержать пробелы, специальные символы и быть любой длины.
Массивы, индексами которых являются строки, называются ассоциативными массивами. Индексы ассоциативных массивов называются ключами. Пример ассоциативного массива:
Многомерные массивы
Многомерные массивы похожи на записи в языке Pascal или структуры в языке C.
Подробно о массивах и операциях с массивами вы можете узнать здесь
Тип object (объекты)
Объект является одним из базовых понятий объектно-ориентированного программирования. Внутренняя структура объекта похожа на хэш, за исключением того, что для доступа к отдельным элементам и функциям используется оператор ->, а не квадратные скобки.
class foo
<
function do_foo ()
<
echo «Doing foo.» ;
>
>
Подробное рассмотрение объектов производится в разделе PHP и ООП
Тип resource (ресурсы)
Тип NULL («пустой» тип)
Переменная считается NULL если:
ей была присвоена константа NULL;
ей еще не было присвоено какое-либо значение;
она была удалена с помощью unset().
Псевдотип mixed (смешанный)
mixed говорит о том, что параметр может принимать множество (но не обязательно все) типов.
gettype(), например, принимает все типы PHP, тогда как str_replace() принимает строки и массивы.
Псевдотип number (числовой)
number говорит о том, что параметр может быть либо integer, либо float.
Псевдотип callback (обратного вызова)
Некоторые функции, такие как call_user_func() или usort() принимают в качестве параметра определенные пользователем callback-функции. Callback-функции могут быть не только простыми функциями, но также методами объектов, включая статические методы классов.
PHP-функция передается просто как строка ее имени. Вы можете передать любую встроенную или определенную пользователем функцию за исключением array(), echo(), empty(), eval(), exit(), isset(), list(), print() и unset().
Приведем примеры callback функций:
// простой пример callback
function my_callback_function () <
echo ‘hello world!’ ;
>
call_user_func ( ‘my_callback_function’ );
// примеры callback-метода
class MyClass <
function myCallbackMethod () <
echo ‘Hello World!’ ;
>
>
Мы рассмотрели достаточно поверхностно типы данных PHP. Для более подробного ознакомления с этим вопросом посетите подраздел «Типы данных PHP».