12=>true);
echo$books["php"];
//выведет"PHPusersguide"
echo$books[12];
//выведет1
?>
Пример2.9.МассивывPHP
Еслидляэлементаключнезадан,товкачествеключаберетсямаксимальныйчисловойключ,увеличенныйнаединицу.Еслиуказатьключ,которомуужебылоприсвоенокакое-тозначение,тоонобудетперезаписано.НачинаясPHP4.3.0,еслимаксимальныйключ–отрицательноечисло,тоследующимключоммассивабудетноль(0).
<?php
//массивы$arrи$arr1эквивалентны
$arr=array(5=>43,32,56,"b"=>12);
$arr1=array(5=>43,6=>32,
7=>56,"b"=>12);
?>
Пример2.10.МассивывPHP
ЕслииспользоватьвкачествеключаTRUEилиFALSE,тоегозначениепереводитсясоответственновединицуинольтипаinteger.ЕслииспользоватьNULL,товместоключаполучимпустуюстроку.Можноиспользоватьисамупустуюстрокувкачествеключа,приэтомеенадобратьвкавычки.Такчтоэтонетожесамое,чтоиспользованиепустыхквадратныхскобок.Нельзяиспользоватьвкачествеключамассивыиобъекты.
Определениеспомощьюсинтаксисаквадратныхскобок
Создатьмассивможно,простозаписываявнегозначения.Какмыужеговорили,значениеэлементамассиваможнополучитьспомощьюквадратныхскобок,внутрикоторыхнужноуказатьегоключ,например,$book["php"].Еслиуказатьновыйключиновоезначение,например,$book["new_key"]="new_value",товмассивдобавитсяновыйэлемент.Еслимынеукажемключ,атолькоприсвоимзначение$book[]="new_value",тоновыйэлементмассивабудетиметьчисловойключ,наединицубольшиймаксимальногосуществующего.Еслимассив,вкоторыймыдобавляемзначения,ещенесуществует,тоонбудетсоздан.
<?
$books["key"]=value;//добавиливмассив
//$booksзначение
//valueсключомkey
$books[]=value1;/*добавиливмассив
значениеvalue1с
ключом13,поскольку
максимальныйключу
насбыл12*/
?>
Длятогочтобыизменитьконкретныйэлементмассива,нужнопростоприсвоитьемусегоключомновоезначение.Изменитьключэлементанельзя,можнотолькоудалитьэлемент(паруключ/значение)идобавитьновую.Чтобыудалитьэлементмассива,нужноиспользоватьфункциюunset().
<?php
$books=array("php"=>
"PHPusersguide",
12=>true);
$books[]=
"BookaboutPerl";//добавилиэлемент
//сключом(индексом)
//13этоэквивалентно
//$books[13]=
//"BookaboutPerl";
$books["lisp"]=
123456;/*Этодобавляеткмассивуновый
элементсключом"lisp"и
значением123456*/
unset($books[12]);//Этоудаляетэлемент
//cключом12измассива
unset($books);//удаляетмассивполностью
?>
Заметим,что,когдаиспользуютсяпустыеквадратныескобки,максимальныйчисловойключищетсясредиключей,существующихвмассивесмоментапоследнегопереиндексирования.Переиндексироватьмассивможноспомощьюфункцииarray_values().
<?php
$arr=
array("a","b","c");/*Создаеммассив
созначениями
"a","b"и"c".
Посколькуключи
неуказаны,они
будут0,1,2
соответственно*/
print_r($arr);//выводиммассив(иключи,
//изначения)
unset($arr[0]);
unset($arr[1]);
unset($arr[2]);
//удаляемизнеговсезначения
print_r($arr);//выводиммассив(иключи,
//изначения)
$arr[]="aa";//добавляемновыйэлемент
//вмассив.
//Егоиндексом(ключом)
//будет3,ане0
print_r($arr);
$arr=
array_values($arr);//переиндексируем
//массив
$arr[]="bb";//ключомэтогоэлемента
//будет1
print_r($arr);
?>
Пример2.11.Переиндексациямассива
Результатомработыэтогоскриптабудет:
Array([0]=>a[1]=>b[2]=>c)
Array()
Array([3]=>aa)
Array([0]=>aa[1]=>bb)
Типobject(объекты)
Объекты–типданных,пришедшийизобъектно-ориентированногопрограммирования(ООП).СогласнопринципамООП,класс–этонаборобъектов,обладающихопределеннымисвойствамииметодамиработысним,аобъектсоответственно–экземпляркласса.Например,программисты–этокласслюдей,которыепишутпрограммы,изучаюткомпьютернуюлитературуи,крометого,каквселюди,имеютимяифамилию.Теперь,есливзятьодногоконкретногопрограммиста,ВасюИванова,томожносказать,чтоонявляетсяобъектомклассапрограммистов,обладаеттемижесвойствами,чтоидругиепрограммисты,тожеимеетимя,пишетпрограммыит.п.
ВPHPдлядоступакметодамобъектаиспользуетсяоператор->.Дляинициализацииобъектаиспользуетсявыражениеnew,создающеевпеременнойэкземпляробъекта.
<?php
//создаемкласслюдей
classPerson
{
//метод,которыйобучаетчеловекаPHP
functionknow_php()
{
echo"ТеперьязнаюPHP";
}
}
$bob=newPerson;//создаемобъект
//классачеловек
$bob->know_php();//обучаемегоPHP
?>
Пример2.12.ОбъектывPHP
БолееподробнореализациюпринциповООПвязыкеPHPмырассмотримводнойизследующихлекций.
Типresource(ресурсы)
Ресурс–этоспециальнаяпеременная,содержащаяссылкунавнешнийресурс(например,соединениесбазойданных).Ресурсысоздаютсяииспользуютсяспециальнымифункциями(например,mysql_connect(),pdf_new()ит.п.).
ТипNull
СпециальноезначениеNULLговоритотом,чтопеременнаянеимеетзначения.
ПеременнаясчитаетсяNULL,если:
- ейбылаприсвоенаконстантаNULL($var=NULL);
- ейещенебылоприсвоенокакое-либозначение;
- онабылаудаленаспомощьюunset().
СуществуеттолькооднозначениетипаNULL–регистронезависимоеключевоесловоNULL.
Решениезадачи
Теперьвернемсякзадаче,которуюмыпоставиливсамомначалелекции.Напомним,чтоонасостоялавсоставленииписьмаразнымлюдямпоповодуразныхсобытий.Попытаемсяиспользоватьдлярешенияэтойзадачиизученныесредства–переменные,операторы,константы,строкиимассивы.Взависимостиотполучателяизменяетсясобытиеиобращение,указанныевписьме,поэтомуестественновынестиэтивеличинывпеременные.Болеетого,посколькусобытийилюдеймного,удобноиспользоватьпеременныетипамассив.Подписьвписьмеостаетсяпостояннойвсегда,поэтомулогичнозадатьеекакконстанту.Чтобынеписатьслишкомдлинныеигромоздкиестроки,используемоператорконкатенации.Итак,вотчтополучилось:
<?
//пустьнашаподпись
//будетконстантой
define("SIGN","Суважением,Вася");
//зададиммассивылюдейисобытий
$names=array("ИванИванович",
"ПетрПетрович",
"СеменСеменович");
$events=array(
"f"=>"деньоткрытыхдверей",
"o"=>"открытиевыставки",
"p"=>"балвыпускников");
//составимтекстприглашения
$str="Уважаемый(ая),$names[0].";
$str.="<br>ПриглашаемВасна".
$events["f"];</