215.41K
Category: programmingprogramming

Классы и объекты

1.

2.

Классы и объекты
Переменные в РНР могут быть не только заранее заданного типа.
При помощи объектно-ориентированного подхода можно
формировать собственные типы переменных.
Такие пользовательские типы называются классами. Экземпляры
классов или переменные их типа называются объектами.
Одним из главных назначений объектно-ориентированного
подхода является создание собственных абстрактиых типов
даиных, позволяющих наряду с предопределенными типами
(такими как integer, bool, douЫe, string) вводить свои (классы) и
объявлять "переменные" таких типов (объекты).

3.

Создание класса
Класс объявляется при помощи ключевого слова class, после
которого следуют уникальное имя класса и тело класса в фигурных
скобках.
Синтаксис РНР предъявляет к названию класса такие же
требования, как и к названию переменных, оно может содержать
любое количество цифр, букв и символов подчеркивания, однако
не может начинаться с цифры. Имена классов, в отличие от имен
переменных и объектов, не зависят от регистра.

4.

Создание класса

5.

Создание класса
Прерывать объявление класса недопустимо, его не удастся
механически разбить и при помощи инструкции include () или
require ().
В теле класса могут быть объявлены переменные, которые
называются переменными класса.

6.

Разделение классов и остального кода
В скрипте возможно лишь один раз определить класс .
Однако на практике под каждый класс выделяется отдельный файл,
который подключается в скрипт либо посредством инструкций require и
include, либо при помощи автозагрузки.
В большой системе, состоящей из сотен классов, использование
инструкций require и include может легко привести к ситуации, когда
один и тот же файл включается повторно.
Чтобы исключить повторное определение классов, вместо инструкций r
equire и i nclude используются require_once и inc lude_onc e. Их отличие
от оригинальных инструкций состоит в том, что они включают файл
только один раз, попытки повторного включения файла игнорируются

7.

Создание объекта
<?php
x = 5;
require 'point.php';
$point = new Point;
$point->x = 5;
$point->y = З;
echo $point->x; // 5
Объект $point класса Point создается при помощи ключевого слова new.
Для того чтобы обратиться к переменным объекта $х и $у, следует
воспользоваться специальным оператором->. В отличие от
традиционных переменных РНР, при обращении к переменным объекта
символ $ не указывается после->.

8.

Область видимости переменных класса
Однако при введении класса мы вынуждены ввести понятия :
области видимости. Не всегда переменные, объявленные в одной
части программы, доступны в другой.
В языке РНР такими «водоразделами» являются ключевые слова
class и function, которые объявляют классы и функции/методы.
Впрочем, существует множество механизмов для передачи
значений за пределы этих границ, которые будут рассмотрены
позже

9.

Спецификаторы доступа
Переменные класса объявляются при помощи одного из ключевых
слов: puЫic, private или protected. Эти ключевые слова называются
спецификаторами доступа и позволяют указать, какие переменные
доступны извне объекта, а какие нет. Открытые члены класса
объявляются спецификатором доступа puЫic и доступны как
внутри класса, так и внешнему по отношению к классу коду.
Закрытые методы и члены класса объявляются при помощи
спецификатора private и доступны только в рамках класса.
Protected-при наследовании.

10.

Статические переменные класса
В PHP допускается создание переменных на уровне класса. Такие
переменные называются статическими и объявляются при помощи
ключевого слова static. Особенностью таких переменных является в
озможность их инициализации прямо в классе при объявлении.
<?php
class MyStatic
{
public static $staticvar = 100;
}

11.

Задачи
• В задачах, где не указано, что нужно вводить число с клавиатуры, можно не вводить числа, а
использовать заранее проинициализированные переменные.
• 1. В этом задании вам нужно вычислить факториал для числа, вводимого пользователем.
2. Вычислить сумму всех четных чисел, встречающихся в ряду от 1 до числа a, которое вводит
пользователь.
• 3. Посчитать, сколько нечетных чисел находится в промежутке между a и b (инициализируются
заранее).
4. Напечатать таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2,
…, 10 фунтов (1 фунт = 453 г).
• 5. Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток будет через
3, 6, 9, …, 24 часа, если первоначально была одна амеба.
• 6. Дано число n. Из чисел 1, 4, 9, 16, 25, (квадрат числа по порядку) … напечатать те, которые не
превышают n.
• 7. Последовательность Фибоначчи образуется так: первый и второй члены последовательности равны
1, каждый следующий равен сумме двух предыдущих (1, 1, 2, 3, 5, 8, 13, …). Найти:
а) первое число в последовательности Фибоначчи, большее данного числа n;
• б) сумму всех чисел в последовательности Фибоначчи, которые не превосходят 1000.

12.

Ссылки на переменные
<?php
require 'point . php';
$first = new Point;
$first->x = З;
$first->y = З;
$second = $f irst;
$second->x = 5;
$second->y = 5;
echo "х: {$first->x}, у: {$first->y}"; // х: 5, у: 5

13.

Ссылки на переменные
Можно было ожидать, что объекты $first и $second будут
независимыми, однако присвоение новых значений переменным
одного объекта приводит к тому, что эти же значения получает и
второй объект. То есть переменные $first и $second ссылаются на
один и тот же объек
Иными словами, вместо того чтобы каждый раз передавать объект,
как это происходит в случае обычных переменных, передается
ссылка на объект. Это позволяет значительно ускорить выполнение
скриптов, особенно когда объект нужно передать через границу
области видимости

14.

Клонирование объектов
Однако, если все же создание копии текущего объекта
необходимо, используется специальная операция- клонирование.
Она выполняется при помощи ключевого clone, которое ра
сполагается непосредственно перед объектом клонирования
$second = clone $first;
Схематически процесс клонирования объекта $first и получения
независимой копии $second

15.

Ссылки на переменные и клонирование

16.

Константы
Константы отличаются от переменных тем , что их значение не
может изменяться во время выполнения скрипта. Кроме того,
константы, в отличие от переменных, не мoryт принимать
неопределенное значение null.
Ьооl define(
string $name,
mixed $value [ ,
bооl $case_insensitive = false])

17.

Константы
Функция принимает в качестве первого параметра $name строку с
именем константы, в качестве второго параметра $value
передается значение константы. Третий необязательный параметр
$case_insensitive определяет чувствительность константы к
регистру.
По умолчанию константы, точно так же как и переменные, зависят
от регистра, т. е. константы с именами CONSTANT и constant
считаются разными, однако если при создании константы в
качестве третьего параметра $case_insensitive передать значение
true, новая константа не будет зависеть от регистра. В случае
успешного создания константы функция define () возвращает true, в
противном случае возвращается значение false.

18.

Константы
<?php
define ( 'NUМВER' , 1) ;
define('VALUE', 'Hello, world!');
echo NUМВER; // 1
echo VALUE; // Hello, world!
echo Number; // Notice: Use of undefined
//constant Number - assшned 'Number'
Обращаться к константам можно по их имени, при этом, в отличие от
переменных, указывать символ $ перед именем константы не требуется.

19.

Константы
Следует отметить, что РНР имеет ряд предопределенных констант,
с которыми мы уже встречались в предыдущих главах: null, true и
false. Все они не зависят от регистра, поэтому в программах можно
встретить различные их записи, например, TRUE, true, True и т. д.
Функция define () не очень удобна для проверки существования
константы, во-первых она создает константу, если она не
существует, во-вторых, выводит замечание, если константа уже
определена. Для проверки существования константы имеется
отдельная функция defined () со следующим синтаксисом: Ьооl
defined(string $nаmе)

20.

Динамическое имя константы
В отличие от переменных, для динамического формирования
констант специальный синтаксис не предусмотрен, однако
существует отдельная функция constant () со следующим
синтаксисом:
mixed constant (string $nаmе)
Функция принимает строку $ nаmе с именем константы и
возвращает ее значение.

21.

Предопределенеленные константы

22.

Абсолютный и относительный пути к файлу
Предопределенную константу _ DIR _ довольно часто используют
совместно с конструкциями include и require . При подключении к
скрипту файлов следует указать к ним путь. Причем путь может
быть либо относительным

23.

Константы класса
Классы также могут содержать константы, которые определяются
при помощи ключевого слова const. В листинге 6.8 приводится
пример класса constantClass, включающего в свой состав константу
NАМЕ, которая содержит имя класса.
Существование констант может быть проверено при помощи
функции defined (), которая возвращает true, если константа
существует, и false - в противном случае

24.

Циклы
• Для совершения повторяемых действий в PHP, как и в других
языках программирования, используются циклы. В PHP имеются
следующие виды циклов:
• for
• while
• do..while
• foreach (рассматривается в теме про массивы)

25.

Цикл for
for ([инициализация счетчика]; [условие]; [изменение счетчика])
{
// действия
}
Рассмотрим стандартный цикл for:
<?php
for ($i = 1; $i < 10; $i++)
{
echo "Квадрат числа $i равен " . $i * $i . "<br/>";
}

26.

Цикл while
Цикл while проверяет истинность некоторого условия, и если условие истинно, то выполняются блок
выражений цикла:
<?php
$counter = 1;
while($counter<10)
{
echo $counter * $counter . "<br />";
$counter++;
}
Если в блоке while всего одна инструкция, то фигурные скобки блока можно опустить:
<?php
$counter = 0;
while(++$counter<10)
echo $counter * $counter . "<br />";

27.

Цикл do..while
Цикл do..while похож на цикл while, только теперь выполняется блок цикла, и
только потом выполняется проверка условия. То есть даже если условие
ложно, то блок цикла выполнится как минимум один раз:
<?php
$counter = 1;
do
{
echo $counter * $counter . "<br />";
$counter++;
}
while($counter<10)
?>

28.

Цикл foreach
Тем не менее выше использованный способ перебора не поможет, если индексы
определяются вручную и отличаются они от соседних индексов не на единицу, а на
произвольную величину. В этом случае мы можем использовать специальный цикл - foreach:
<?php
$users = [1 => "Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"];
foreach($users as $element)
{
echo "$element<br />";
}
?>
В цикле foreach из массива последовательно извлекаются все элементы, и их значение
помещается в переменную, указанную после ключевого слова as. В данном случае в
переменную $element по очереди помещаются все четыре значения из массива $users. Когда
будет извлечен последний элемент из массива, цикл завершается.

29.

Операторы continue и break
Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться
оператором break:
<?php
for ($i = 1; $i < 10; $i++)
{ $result = $i * $i;
if($result>80)
{
echo "Квадрат числа $i равен $result <br/>";
break; }
}?>
И если вдруг результат операции окажется больше 80, то происходит выход из цикла.
Для управления циклами также применяется оператор continue. Он осуществляет переход к следующей итерации цикла:
<?php
for ($i = 1; $i < 10; $i++)
{ if($i==5)
{
echo "Квадрат числа $i равен " . $i * $i . "<br/>";
continue; }
}?>
При выполнении программы, когда значение $i станет равным 5, произойдет переход к следующей итерации, а все остальные выражения,
которые следуют после оператора continue выполняться не будут.
English     Русский Rules