Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014-01 КНЯЗЕВА_Эл_бизнес / Электронный бизнес_Князева.doc
Скачиваний:
50
Добавлен:
20.02.2016
Размер:
1.24 Mб
Скачать
      1. Рекурсивные функции

Ситуация, при которой функция многократно вызывает сама себя, пока не будет выполнено некоторое условие, открывает замечательные возможности. Рекурсивные функции особенно часто используются при выполнении повторяющихся действий — например, при поиске в файлах/массивах и построении графических изображений (например, фракталов). Классическим примером рекурсивных функций, встречающимся во многих курсах программирования, является суммирование чисел от 1 до N. Программа, приведенная в следующем примере, суммирует все целые числа от 1 до 10.

Пример использования рекурсивной функции для суммирования последовательных целых чисел:

function summation ($count) {

if ($count != 0) :

return $count + summation($count-1);

endif;

}

$sum = summation(10);

print "Summation = $sum";

Если функция вызывается достаточно часто, рекурсия делает программу более эффективной. Тем не менее, при использовании рекурсии необходима осторожность, поскольку ошибки могут привести к зацикливанию программы.

Объекты (классы)

Объектом называется набор данных и связанные с данными операции (методы). Например, объект Автомобиль имеет данные: двигатель, руль, бензобак и т.д. и связанные с данными операции завести двигатель; повернуть нелево/направо; заправиться.

PHP, как и любой объектно-ориентированный язык программирования, имеет средства поддержки классов.

Объявление класса:

сlass <имя класса> {описание переменных и методов (функций) класса}

Пример объявления и описания класса Book:

<?php

class Book{

var $Name,$Author,$Price,$Count_Page,$Tirag;

function Book ($mas){

list($this->Name,$this->Author,$this->Price,$this->Count_Page,$this->Tirag)=$mas;}

function Content(){

return (' " '.$this->Name.' " '.$this->Author);}

function Price_tirag(){

return("Тираж книги ".$this->Price*$this->Tirag);}

function Price_page() {

return ("Стоимость страницы ".$this->Price / $this->Count_Page);}

}?>

Обращение к переменной класса производится через описатель $this->

Метод, имя которого совпадает и именем класса (в данном примере Book), называется конструктором класса. Экземпляры класса (переменные) создаются через вызов конструктора оператором new:

$ переменная->конструктор класса (параметры…).

Пример вызова методов класса Book:

<?

$book1=new Book (array("Зеленая миля", "Стивен Кинг", 150, 450,17000));

$book2=new Book (array("Сказка о тройке", "Стругацкие", 100, 350,20000));

echo $book1->Content();?><br><?

echo $book1->Price_tirag();?><br><?

echo $book1->Price_page();?><br><?

echo $book2…………………..

?>

Часто встречается ситуация, когда в рамках данного класса можно выделить наследуемый класс (подкласс) с дополнительными данными и работы с ними. Например, в рамках класса Автомобиль можно выделить Кабриолет с дополнительными данными Откидной верх и функциями по его открыванию и накрыванию.

Объявление подкласса:

сlass <имя подкласса> extends <имя класса>{описание переменных и методов (функций) подкласса}

Пример объявления подкласса Book_CD.

<?php class Book_CD extends Book{

var $chislo_CD, $Price_CD; //одного

function Book_CD ($mas) {

list($this->Name,$this->Author,$this->Price,$this->Count_Page,$this->Tirag,

$this->chislo_CD,$this->Price_CD)=$mas;}

function All_price() {return ($this->Price+$this->chislo_CD*$this->Price_CD);}

function Price_tirag() {return ($this->All_price()*$this->Tirag);}

}?>

Ключевое слово extends указывает, что класс Book_CD является расширением класса Book. Новый класс автоматически наследует все переменные и методы класса Book и добавляет переменные chislo_CD, Price_CD, с которыми работает новый метод All_price(). В новом классе метод Price_tirag() замещается одноименным методом, который работает по другому алгоритму. Реализуется принцип полиморфизма.

Пример вызова методов класса и подкласса:

<? $book1=new Book(array("My SQL", "Леон Аткинсон", 210, 648,3500));

$book2=new Book_CD(array("PHP в WEB-дизайне", "Алексей Костарев", 210, 560, 3500, 2,50));

echo $book1->Content().” – “. echo $book1->Price_tirag()?><br> // 735000

<? echo $book2->Content().” – “. echo $book2->Price_tirag() ?> // 1085000

Объекты могут быть элементами массивов. Переменные объекта тоже могут быть массивами. Поэтому можно построить довольно сложные структуры (деревья, списки и т.п.).