Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы по МИРу.doc
Скачиваний:
3
Добавлен:
28.04.2019
Размер:
572.42 Кб
Скачать

17. Объектно-ориентированное программирование, создание классов и объектов, доступ к методам и свойствам объекта.

Объектно-ориентированные программы более просты и мобильны, их легче модифицировать и сопровождать.

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

Класс — это просто тип переменной. Переменная класса (объект класса) является в некотором смысле автономной

сущностью. Обычно такой объект имеет набор свойств и операций (или методов), которые могут быть с ним проведены. Например, тип int—класс. Переменная этого "класса" будет обладать одним свойством (ее целым значением), а также набором методов (сложение, вычитание, инкремент и т. д.).

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

class MyName {

описания свойств

определения методов

}

$0bj = new MyName -- в программе существует объект $obj, который "ведет себя" так

же, как и все остальные объекты класса MyName.

Свойства объекта

Свойство —это просто своеобразная переменная внутри объекта класса, в которой может храниться какое-то значение.

Каждый объект одного и того же класса имеет свой собственный набор значений свойств, и они не пересекаются. Таким образом, объект класса со стороны представляется контейнером, хранящим

свои свойства.

Объявление свойств задается при помощи ключевого слова var:

var $pNamel, $pname2, . . . ;

Rаждое свойство должно иметь уникальное имя в классе. Инструкций var может быть несколько, и они могут встречаться в любом месте описания класса, а не только в его начале.

Получение доступ к какому-то свойству определенного объекта. ->:

echo $Obj->Namel;

$Obj->Name2="PHP Four";

Если какое-то свойство (например, с именем Subobj) объекта само является объектом (что вполне допустимо), нужно использовать две "стрелочки":

echo SObj->SubObj->Property; // Выводим значение свойства Property

Такой синтаксис был придуман из того расчета, чтобы быть максимально простым. Добавлю, что указание объекта $obj перед стрелкой обязательно по той причине, что каждый объект имеет свой собственный набор свойств.

Методы

Основная идея ООП — инкапсуляция — базируется на объединении данных (свойств) объекта с функциями, которые эти данные обрабатывают. Фактически, свойства хранят в себе состояние объекта в данный момент времени, тогда как методы (функции обработки) являются чем-то вроде механизма посылки запроса экземпляру класса (объекту). MySQL: Drop ( ) , заставляет таблицу очистить и удалить себя из базы данных. Вызов этого метода из программы происходит примерно так:

$Obj->Drop(); // таблица $0bj удаляет сама себя!

К примеру, метод Add того же класса (добавление новой записи в таблицу) принимает только один параметр — ассоциативный массив, содержащий данные, а метод select о (получить все записи, удовлетворяющие запросу) использует три параметра — логическое выражение запроса, максимальное

количество получаемых записей и правила сортировки результата. Он возвращает массив с результирующими записями.

Доступ объекта к своим свойствам

$0bjl=new Mysqltable;

$Obj2=new MysqlTable;

echo $Objl->TableName, " ", $Obj2->TableName;

Здесь никаких проблем не возникает — ясно, что выводятся свойства разных объектов — мы же сами указали их до стрелки. Однако давайте посмотрим, что будет, если вызвать какой-нибудь метод одного из объектов:

$Objl->Drop() ;

При вызове метода так же, как и при доступе к свойству, нужно указать объект, который должен "откликнуться на запрос".

Оказывается, для доступа к свойствам (и методам, т. к. один метод вполне может вызывать другой) внутри метода используется специальная предопределенная переменная $this, содержащая тот объект, для которого был вызван метод.

Метод всегда знает, для какого объекта он был вызван.

Использование ссылок говорит о том, что $this — не просто копия объекта-хозяина, это и есть хозяин. Например, если бы в $obj1->Drop ( ) мы захотели изменить какое-то свойство $this, оно поменялось бы и у $objl, но не у $obj2 или других объектов.

Не забудьте про & сразу после оператора присваивания (то есть создавайте ссылку на элемент массива), иначе метод Doit () будет вызван не для самого объекта, присутствующего в массиве, а для его копии, полученной в $obj.