Типыданных
PHPподдерживаетвосемьпростыхтиповданных.
Четырескалярныхтипа:
- boolean(логический);
- integer(целый);
- float(сплавающейточкой);
- string(строковый).
Двасмешанныхтипа:
- array(массив);
- object(объект).
Идваспециальныхтипа:
ВPHPнепринятоявноеобъявлениетиповпеременных.Предпочтительнее,чтобыэтоделалсаминтерпретаторвовремявыполненияпрограммывзависимостиотконтекста,вкоторомиспользуетсяпеременная.Рассмотримпопорядкувсеперечисленныетипыданных.
Типboolean(булевилилогическийтип)
Этотпростейшийтипвыражаетистинностьзначения,тоестьпеременнаяэтоготипаможетиметьтолькодвазначения–истинаTRUEилиложьFALSE.
Чтобыопределитьбулевтип,используютключевоесловоTRUEилиFALSE.Обарегистронезависимы.
<?php
$test=True;
?>
Пример2.5.Логическийтип
Логическиепеременныеиспользуютсявразличныхуправляющихконструкциях(циклах,условияхит.п.,болееподробноречьонихпойдетводнойизследующихлекций).Иметьлогическийтип,т.е.приниматьтолькодвазначения,истинуилиложь,могуттакжеинекоторыеоператоры(например,операторравенства).Онитакжеиспользуютсявуправляющихконструкцияхдляпроверкикаких-либоусловий.Например,вусловнойконструкциипроверяетсяистинностьзначенияоператораилипеременнойивзависимостиотрезультатапроверкивыполняютсятеилииныедействия.Здесьусловиеможетбытьистинноилиложно,чтокакразиотражаетпеременнаяиоператорлогическоготипа.
<?php
//Оператор'=='проверяетравенство
//ивозвращает
//булевозначение
if($know==False){//если$know
//имеетзначение
//false
echo"ИзучайPHP!";
}
if(!$know){//тожесамое,что
//ивыше,т.е.проверка
//имеетли$knowзначение
//false
echo"ИзучайPHP!";
}
/*оператор==проверяет,совпадаетли
значениепеременной$knowсострокой
"ИзучайPHP".Еслисовпадает,то
возвращаетtrue,иначе–false.
Есливозвращеноtrue,товыполняется
то,чтовнутрифигурныхскобок*/
if($know=="ИзучайPHP")
{echo"Начализучать";}
?>
Пример2.6.Использованиелогическоготипа
Типinteger(целые)
ЭтоттипзадаетчислоизмножествацелыхчиселZ={...,-2,-1,0,1,2,...}.Целыемогутбытьуказанывдесятичной,шестнадцатеричнойиливосьмеричнойсистемесчисления,пожеланиюспредшествующимзнаком"-"или"+".
Есливыиспользуетевосьмеричнуюсистемусчисления,выдолжныпредваритьчисло0(нулем),дляиспользованияшестнадцатеричнойсистемынужнопоставитьпередчислом0x.
<?php
#десятичноечисло
$a=1234;
#отрицательноечисло
$a=-123;
#восьмеричноечисло(эквивалентно
#83вдесятичнойсистеме)
$a=0123;
#шестнадцатеричноечисло(эквивалентно
#26вдесятичнойсистеме)
$a=0x1A;
?>
Размерцелогозависитотплатформы,хотя,какправило,максимальноезначениеоколодвухмиллиардов(это32-битноезнаковое).БеззнаковыецелыеPHPнеподдерживает.
Есливыопределитечисло,превышающеепределыцелоготипа,онобудетинтерпретированокакчислосплавающейточкой.Такжеесливыиспользуетеоператор,результатомработыкоторогобудетчисло,превышающеепределыцелого,вместонегобудетвозвращеночислосплавающейточкой.
ВPHPнесуществуетоператораделенияцелых.Результатом1/2будетчислосплавающейточкой0.5.Выможетепривестизначениекцелому,чтовсегдаокругляетеговменьшуюсторону,либоиспользоватьфункциюround(),округляющуюзначениепостандартнымправилам.Дляпреобразованияпеременнойкконкретномутипунужнопередпеременнойуказатьвскобкахнужныйтип.Например,дляпреобразованияпеременной$a=0.5кцеломутипунеобходимонаписать(integer)(0.5)или(integer)$aилииспользоватьсокращеннуюзапись(int)(0.5).Возможностьявногоприведениятиповпотакомупринципусуществуетдлявсехтиповданных(конечно,невсегдазначениеодноготипаможноперевестивдругойтип).Мынебудемуглублятьсявовсетонкостиприведениятипов,посколькуPHPделаетэтоавтоматическивзависимостиотконтекста.
Типfloat(числасплавающейточкой)
Числасплавающейточкой(онижечисладвойнойточностиилидействительныечисла)могутбытьопределеныприпомощилюбогоизследующихсинтаксисов:
<?php
$a=1.234;
$b=1.2e3;
$c=7E-10;
?>
Размерчисласплавающейточкойзависитотплатформы,хотямаксимум,какправило,~1.8e308сточностьюоколо14десятичныхцифр.
Типstring(строки)
Строка–этонаборсимволов.ВPHPсимвол–этотожесамое,чтобайт,этозначит,чтосуществуетровно256различныхсимволов.Этотакжеозначает,чтоPHPнеимеетвстроеннойподдержкиUnicode.ВPHPпрактическинесуществуетограниченийнаразмерстрок,поэтомунетабсолютноникакихпричинбеспокоитьсяобихдлине.
СтрокавPHPможетбытьопределенатремяразличнымиспособами:
- спомощьюодинарныхкавычек;
- спомощьюдвойныхкавычек;
- heredoc-синтаксисом.
Одинарныекавычки
Простейшийспособопределитьстроку–этозаключитьееводинарныекавычки"'".Чтобыиспользоватьодинарнуюкавычкувнутристроки,какивомногихдругихязыках,переднейнеобходимопоставитьсимволобратнойкосойчерты"\",т.е.экранироватьее.Еслиобратнаякосаячертадолжнаидтипередодинарнойкавычкойлибобытьвконцестроки,необходимопродублироватьее"\\'".
Есливнутристроки,заключеннойводинарныекавычки,обратныйслэш"\"встречаетсяпередлюбымдругимсимволом(отличнымот"\"и"'"),тоонрассматриваетсякакобычныйсимволивыводится,какивсеостальные.Поэтомуобратнуюкосуючертунеобходимоэкранировать,толькоеслионанаходитсявконцестроки,передзакрывающейкавычкой.
ВPHPсуществуетрядкомбинацийсимволов,начинающихсяссимволаобратнойкосойчерты.Ихназываютуправляющимипоследовательностями,иониимеютспециальныезначения,окоторыхмырасскажемнемногопозднее.Таквот,вотличиеотдвухдругихсинтаксисов,переменныеиуправляющиепоследовательностидляспециальныхсимволов,встречающиесявстроках,заключенныхводинарныекавычки,необрабатываются.
<?php
echo'Такжевыможетевставлятьвстроки
символновойстрокитакимобразом,
посколькуэтонормально';
//Выведет:Чтобывывести'надо
//переднейпоставить\
echo'Чтобывывести\'надоперед'.
'нейпоставить\\';
//Выведет:ВыхотитеудалитьC:\*.*?
echo'ВыхотитеудалитьC:\\*.*?';
//Выведет:Этоневставит:\nновуюстроку
echo'Этоневставит:\nновуюстроку';
//Выведет:Переменные$expandтакже
//$eitherнеподставляются
echo'Переменные$expandтакже$either'.
'неподставляются';
?>
Пример2.7.Использованиеуправляющихпоследовательностей
Двойныекавычки
Еслистроказаключенавдвойныекавычки""",PHPраспознаетбольшееколичествоуправляющихпоследовательностейдляспециальныхсимволов.Некоторыеизнихприведенывтаблице2.7.
Таблица2.7.Управляющиепоследовательности |
Последовательность |
Значение |
\n |
Новаястрока(LFили0x0A(10)вASCII) |
\r |
Возвраткаретки(CRили0x0D(13)вASCII) |
\t |
Горизонтальнаятабуляция(HTили0x09(9)вASCII) |
\\ |
Обратнаякосаячерта |
\$ |
Знакдоллара |
\" |
Двойнаякавычка |
Повторяем,есливызахотитеэкранироватьлюбойдругойсимвол,обратнаякосаячертатакжебудетнапечатана!
Самымважнымсвойствомстроквдвойныхкавычкахявляетсяобработкапеременных.
Heredoc
Другойспособопределениястрок–этоиспользованиеheredoc-синтаксиса.Вэтомслучаестрокадолжнаначинатьсяссимвола<<<,послекоторогоидетидентификатор.Заканчиваетсястрокаэтимжеидентификатором.Закрывающийидентификатордолженначинатьсявпервомстолбцестроки.Крометого,идентификатордолженсоответствоватьтемжеправиламименования,чтоивсеостальныеметкивPHP:содержатьтолькобуквенно-цифровыесимволыизнакподчеркиванияиначинатьсянесцифрыилизнакаподчеркивания.
Heredoc-текстведетсебятакже,какистрокавдвойныхкавычках,приэтомихнеимея.Этоозначает,чтовамнетнеобходимостиэкранироватькавычкивheredoc,новыпо-прежнемуможетеиспользоватьперечисленныевышеуправляющиепоследовательности.Переменныевнутриheredocтожеобрабатываются.
<?php
$str=<<<EOD
Примерстроки,охватывающейнесколько
строчек,сиспользованием
heredoc-синтаксиса
EOD;
//Здесьидентификатор–EOD.Ниже
//идентификаторEOD
$name='Вася';
echo<<<EOD
Менязовут"$name".
EOD;
//этовыведет:Менязовут"Вася".
?>
Пример2.8.Использованиеheredoc-синтаксиса
Замечание:ПоддержкаheredocбыладобавленавPHP4.
Типarray(массив)
МассиввPHPпредставляетсобойупорядоченнуюкарту–тип,которыйпреобразуетзначениявключи.Этоттипоптимизированвнесколькихнаправлениях,поэтомувыможетеиспользоватьегокаксобственномассив,список(вектор),хеш-таблицу(являющуюсяреализациейкарты),стэк,очередьит.д.ПосколькувыможетеиметьвкачествезначениядругоймассивPHP,можнотакжелегкоэмулироватьдеревья.
Определитьмассивможноспомощьюконструкцииarray()илинепосредственнозадаваязначенияегоэлементам.
Определениеприпомощиarray()
array([key]=>value,
[key1]=>value1,...)
Языковаяконструкцияarray()принимаетвкачествепараметровпарыключ=>значение,разделенныезапятыми.Символ=>устанавливаетсоответствиемеждузначениемиегоключом.Ключможетбытькакцелымчислом,такистрокой,азначениеможетбытьлюбогоимеющегосявPHPтипа.Числовойключмассивачастоназываютиндексом.ИндексированиемассивавPHPначинаетсяснуля.Значениеэлементамассиваможнополучить,указавпослеименимассивавквадратныхскобкахключискомогоэлемента.Еслиключмассивапредставляетсобойстандартнуюзаписьцелогочисла,тоонрассматриваетсякакчисло,впротивномслучае–какстрока.Поэтомузапись$a["1"]равносильназаписи$a[1],такжекаки$a["-1"]равносильно$a[-1].
<?php
$books=array("php"=>
"PHPusersguide",