Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [ 40 ] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

□ is object($a)

Возвращает true, если $a объявлена как объект.

□ is boolean($a)

Возвращает true, если $a определена как логическая переменная.

□ gettype($a)

Возвращает строки, соответственно, со значениями: array, object, integer, double, string, boolean или unknown type в зависимости от типа переменной.

Последнее значение возвращается для тех переменных, типы которых не являются встроенными в PHP (а такие бывают, например, при добавлении к PHP соответствующих модулей, расширяющих возможности языка). Я на них останавливаться не буду, т. к. в будущем наверняка появятся сотни таких модулей для PHP.

Установка типа переменной

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

settype($a,$type)

Функция пытается привести тип переменной $a к типу $type ($type - одна из строк, возвращаемых gettype() , кроме boolean). Если это сделать не удалось (например, в $a "нечисловая" строка, а мы вызываем settype ($a,"integer") ), возвращает false.

Оператор присваивания

Сильно не ошибусь, если скажу, что нет на свете такой программы, в которой не было бы ни одного оператора присваивания. И в PHP-программе этот оператор, конечно же, тоже есть. Мы уже с ним встречались - это -знак равенства =:

$ имя переменной=значение;

Как видите, разработчики PHP пошли по линии Си в вопросе операторов присваивания (и проверки равенства, которая обозначается ==), чем, я уверен, привнесли свой вклад в размножение многочисленных ошибок. Например, если в Си мы пишем

if(a=b) { ... } вместо

if(a==b) { ... }



Ссылочные переменные

Хотя в PHP нет такого понятия, как указатель (что, возможно, к лучшему, а скорее всего - нет), все же можно создавать ссылки на другие переменные. Существует две разновидности ссылок: жесткие и символические (первые часто называют просто ссылками). Жесткие ссылки появились лишь в PHP версии 4 (в третьей версии существовали лишь символические ссылки).

Жесткие ссылки

Жесткая ссылка представляет собой просто переменную, которая является синонимом другой переменной. Многоуровневые ссылки (то есть, ссылка на ссылку на переменную, как это можно делать, например, в Perl) не поддерживаются. Так что, думаю, не стоит воспринимать жесткие ссылки серьезнее, чем синонимы.

Чтобы создать жесткую ссылку, нужно использовать оператор & (амперсанд). Например:

$a=10;

$b = &$a; теперь $b - то же самое, что и $a

$b=0; на самом деле $a=0

echo "b=$b, a=$a"; aualaeo "b=0, a=0"

(пропуская ненароком один символ равенства), то компилятор выдаст нам по крайней мере предупреждение. Иначе обстоит дело в PHP: попробуйте как-нибудь на досуге написать:

$a=0; $b=1;

if($a=$b) echo "a ё b laeiaelau"; else echo "a ё b бадёё1й";

Интерпретатор даже не "пикнет", а программа восторженно заявит, что "a и b одинаковы", хотя это, очевидно, совсем не так (дело в том, что $a=$b так же, как и $a+$b, является выражением, значение которого есть правая часть оператора присваивания, равная в нашем примере 1).

Примечание

Почему разработчики PHP пошли таким путем, хотя, я уверен, отлично понимали его недостатки (двух мнений тут быть просто не может)? Что бы им стоило вместо = использовать (например, как в Паскале) :=, а вместо == - =? Я не знаю. Зато знаю, что в PHP есть еще несколько "ляпов" (только давайте не будем разжигать религиозных войн по поводу оператора == - каждый программист волен иметь свое мнение), перенятых из Си. Так что призываю вас быть предельно внимательными - тут могут поджидать очень даже неприятные сюрпризы.



( Замечание

Попробуйте убрать строку, в которой создается жесткая ссылка, и вы тут же получите сообщение о том, что элемент с ключом c не определен в массиве

И все же, жесткая ссылка - не абсолютно точный синоним объекта, на который она ссылается. Дело в том, что оператор Unset() , выполненный для жесткой ссылки, не удаляет объект, на который она ссылается, а всего лишь разрывает связь между ссылкой и объектом.

( Замечание

В этой трактовке любую переменную, даже только что созданную, можно рассматривать как жесткую ссылку. Просто она - единственная, кто ссылается на недавно построенный объект.

Итак, жесткая ссылка и переменная (объект), на которую она ссылается, совершенно равноправны, но изменение одной влечет изменение другой. Оператор Unset() разрывает связь между объектом и ссылкой, но объект удаляется только тогда, когда на него никто уже не ссылается.

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

Ссылаться можно не только на переменные, но и на элементы массива (этим жесткие ссылки выгодно отличаются от символических). Например:

$A=array(a => aaa, b => bbb);

$b=&$A[b]; теперь $b - то же, что и элемент с индексом b массива $b=0; на самом деле $A[b]=0;

echo $A[b]; aualaeo 0

Впрочем, элемент массива, для которого планируется создать символическую ссылку, может и не существовать. Как в следующем случае:

$A=array(a => aaa, b => bbb);

$b=&$A[c]; теперь $b - то же, что и элемент с индексом c массива echo "Элемент с индексом c: (".$A[c].")";

В результате выполнения этой программы, хотя ссылке $b и не было ничего присвоено, в массиве $A создастся новый элемент с ключом c и значением - пустой строкой (мы можем это определить по результату работы echo). То есть, жесткая ссылка на самом деле не может ссылаться на несуществующий объект, а если делается такая попытка, то объект создается.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [ 40 ] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189