46400

Массивы. Объекты. Ресурсы. Тип

Лекция

Информатика, кибернетика и программирование

Массив в PHP представляет собой упорядоченную карту – тип, который преобразует значения в ключи. Этот тип оптимизирован в нескольких направлениях, поэтому его можно использовать его как собственно массив, список (вектор), хеш-таблицу (являющуюся реализацией карты), стэк, очередь и т.д.

Русский

2013-11-21

65.5 KB

0 чел.

Лекція 9. Масиви. Об'єкти. Ресурси. Тип

План

1. Тип array (масив)

2. Визначення за допомогою синтаксису квадратних дужок

3. Тип object (об’екти)

4. Тип resource (ресурси)

5. Тип Null

Література:

  1.  Лаура Томсон, Люк Веллінг «Разработка Web-приложений на PHP и MySQL», розділ 3 (стор. 75-78)
  2.  Володимир Дронов «PHP, MySQL, DreamWeaver MX 2004. Разработка интерактивных Web-сайтов», розділ 7 (стор. 190)
  3.   Інтернет-ресурси:   
  4.  

Тип 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" => "PHP users guide",  12 => true);

echo $books["php"];

//выведет "PHP users guide"

echo $books[12];

//выведет 1

?>

Пример 2.9. Массивы в PHP

Если для элемента ключ не задан, то в качестве ключа берется максимальный числовой ключ, увеличенный на единицу. Если указать ключ, которому уже было присвоено какое-то значение, то оно будет перезаписано. Начиная с PHP 4.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" =>  "PHP users guide",  12 => true);

$books[] =  "Book about Perl"; // добавили элемент с ключом (индексом)

// 13 это эквивалентно $books[13] = "Book about Perl";

$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

//создаем класс людей

class Person

{

// метод, который обучает человека PHP

function know_php()

{

echo "Теперь я знаю PHP";

}

}

$bob = new Person; // создаем объект

// класса человек

$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"];

$str .= "<br>" . SIGN;

echo $str; // выведем текст на экран

?>

Заключение

Итак, в этой лекции мы познакомились с основами синтаксиса языка PHP, научились работать с переменными различных типов, константами, операторами, познакомились со всеми существующими в PHP типами данных. Говоря о таких типах данных, как строки и массивы, мы разобрали только самые основы. Эти конструкции настолько удобны и просты в использовании, что заслуживают отдельного разговора. Подробности будут изложены в последующих лекциях. Решая задачу, мы старались использовать только имеющиеся знания и не забегать вперед, поэтому решение не слишком подходит для практического применения.

Контрольні питання

  1.  Що собою представляє масив у PHP?. Як визначається масив в PHP?
  2.  Поясніть запис:

<?php

$books = array ("php" => "PHP users guide",  12 => true);

echo $books["php"];

echo $books[12];

?>

  1.  Чи рівнозначні наведені вирази і чому?
    •  $arr = array(5 => 43, 32, 56, "b" => 12);
    •  $arr1 = array(5 => 43, 6 => 32,  7 => 56,  "b" => 12);

  1.  Прокоментуйте запис.     

<?php

$books = array ("php" =>  "PHP users guide",  12 => true);

$books[] =  "Book about Perl";

$books["lisp"] =  123456;

unset($books[12]);

unset ($books);

?>

  1.  Що буде результатом наведеного прикладу :

<?php

$arr = array ("a","b","c");

print_r($arr);

unset($arr[0]);

unset($arr[1]);

unset($arr[2]);

print_r($arr);

$arr[] = "aa";

print_r($arr);

$arr =  array_values($arr);

$arr[] = "bb";

print_r($arr);

?>

  1.  Дайте визначення типу «об’єкт». Який оператор використовується для доступу до методів об’єкта?Як ініціалізувати об’єкт?

  1.  Які дії виконує приведений код РНР?  

<?php

class Person

{

function know_php()

{

 echo "Теперь я знаю PHP";

}

}

$bob = new Person;

$bob -> know_php();

?>

 

  1.  Яка змінна має тип resource? Як створити змінну типу resource?


 

А также другие работы, которые могут Вас заинтересовать

64559. Этическая проблема действия человека 15.25 KB
  Любое действие человека детерминировано Свободное действие ничем не детерминировано Как непротиворечиво соединить оба высказывания Можно решить что свободы нет. Давайте определим свободу и детерминированность Демонстрация того что решение возможно в рамках принципа рациональности...
64560. Отжиг как операция нагрева 37.5 KB
  Отжигом называют операцию нагрева выдержки при заданной температуре и охлаждения заготовок. Бочвар дал определение двух родов отжига: отжиг первого рода приведение структуры из неравновесного состояния в более равновесное возврат или отдых рекристаллизационный отжиг...
64561. Узловые уравнения установившегося режима через мощности нагрузок и генераторов 33.98 KB
  Физическое объяснение полученной множественности решений: в цепи переменного тока значения мощностей зависят не от абсолютных значений напряжений узлов а от разности фаз; в поперечных ветвях потоки мощности не зависят от фаз напряжений узлов...
64563. Закон как источник права: понятие и содержание 25 KB
  Закон это нормативно-правовой акт принимаемый только высшим представительным органом парламентом представляющим в формально-юридическом смысле весь народ или же непосредственно самим народом путем референдума.
64564. Конкуренция и предпринимательсво. Юридические условия существования конкурентных отношений 15 KB
  Юридические условия существования конкурентных отношений конкуренция правомерная не запре щенная законом автономная деятельность хозяйствую щих субъектов на соответствующем рынке целью которой является получение наиболее выгодных условий производ ства и сбыта законными средствами.
64565. Специфіка філософських світоглядних питань. Джерела філософського знання 25 KB
  Однією з особливостей філософського знання його спрямованість на подолання проблемусвідомлення незавершеності процесу пізнання. Філософське знання пройняте суб’єктивністю. Це є знання певного суспільства і певної особи яка сповідує певні цінності.
64567. Творчество Караваджо 15.24 KB
  Ранние работы Караваджо поясные портреты иногда с включением деталей натюрморта которые Караваджо писал мастерски. В капелле Черази церкви СантаМария дель Пополо Караваджо изменил манеру письма. Фигуры у Караваджо изображены таким образом что у зрителя возникает ощущение необыкновенной реалистичности.