Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готові Технології програмування.doc
Скачиваний:
6
Добавлен:
27.10.2018
Размер:
715.26 Кб
Скачать
  1. Класи, поля, методи, конструктори, деструктори як складові частини ооп.

Оголошення класу

Клас – базове поняття в об’єктна-орієнтованому програмуванні. Примірник класу(екземпляр) - це об'єкт. Об'єкт - це сукупність даних (властивостей) і функцій (методів) для їх обробки. Властивості і методи називаються членами класу. Взагалі, об'єктом є все те, що підтримує інкапсуляцію.

Об’явити клас можна у такий спосіб:

class myClass {

// Class contents go here

}

Вміст класу це комбінація констант, змінних  та функцій( інакше методи класу)

Методи класу та властивості

Методи оголошуються так само як і функції:

class myClass {

function myFunction() {

echo "You called myClass::myFunction";

}

}

Для виклику поза класом використовується оператор ->:

$obj = new myClass();

$obj->myFunction();

Посилання методу класу всередині самого класу, у коді має вигляд:

class myClass {

function myFunction() {

echo "You called myClass::myFunction";

}

function callMyFunction() {

// ???

}

}

Для того, щоб callMyFunction() викликав myFunction() існує спеціальна змінна $this. Ця змінна визначається тільки в межах області об’єкту і завжди вказує на сам об’єкт.

class myClass {

function myFunction($data) {

echo "The value is $data";

}

function callMyFunction($data) {

// Call myFunction()

$this->myFunction($data);

}

}

$obj = new myClass();

$obj->callMyFunction(123);

Таким чином, буде виведене значення 123.

Конструктори

Класи, у яких оголошено метод-констуктор, будуть викликати цей метод при кожному створення нового об'єкта, так що це може виявитися корисним, для того, щоб ініціалізувати стан об'єкту перед його використанням. Конструктор, який раніше збігався з назвою класу, тепер необхідно оголошувати як __construct (), що дозволить легше переміщати класи в ієрархіях. Конструктори в класах-батьків не викликаються автоматично. Щоб викликати конструктор, оголошений в батьківському класі, слід звернутися до методуparent::__construct().

<?php class BaseClass {      function __construct() {          print "Конструктор класу BaseClass\n";      } } class SubClass extends BaseClass {      function __construct() {          parent::__construct();          print "Конструктор класу SubClass\n";      } } $obj = new BaseClass(); $obj = new SubClass(); ?>

Деструктори

Перед звільненням пам'яті, займаної об'єктом, викликається метод __destruct (), яка не приймає параметрів. Він працює як дзеркальне відображення  __construct (). Цей метод корисний для виконання процедури очищення.

<?php class MyDestructableClass {      function __construct() {          print "Конструктор\n";          $this->name = "MyDestructableClass";      }      function __destruct() {          print "Знищується " . $this->name . "\n";      } } $obj = new MyDestructableClass(); ?>

  1. Успадкування класів як частина технології ооп.

Успадкування дозволяє одному об'єкту набувати властивості іншого об'єкта, не плутайте з копіюванням об'єктів. При копіюванні створюється точна копія об'єкта, а при спадкуванні точна копія доповнюється унікальними властивостями, які характерні тільки для похідного об'єкта

Успадкування  класу

Як вже було зазначено вище, успадкування дозволяє одному об'єкту набувати властивості іншого об'єкта. Приклад цього процесу наведемо у наступному коді:

class a {

function test()

{

echo "a::test called";

}

function func()

{

echo "a::func called";

}

}

class b extends a {

function test()

{

echo "b::test called";

}

}

class c extends b {

function test()

{

parent::test();

}

}

class d extends c {

function test()

{

b::test();

}

}

$a = new a();

$b = new b();

$c = new c();

$d = new d();

$a->test(); // Виведення "a::test called"

$b->test(); // Виведення "b::test called"

$b->func(); // Виведення "a::func called"

$c->test(); // Виведення "b::test called"

$d->test(); // Виведення "b::test called"

 

З початку, ми оголосили клас А, потім клас В, що розширює клас А. Клас В має також метод test(), який перекриває оголошений в А, таким чином виводячи так званий b::test.

Таким чином розширення об’єктів буде  обмеженим, бо ви зможете лише перевизначити  функціональні можливості, що надаються «батьківському класу» , без будь –  якої можливості повторного використання. На щастя, батьківські  класи можна отримати за допомогою особливого parent:: namespace, як ми це робили для класу С вище, ви також можете отримати доступ до будь-яких інших класів предка як ми це робили, наприклад, в класі D.