7. R – радіус кола;
X, Y – координати центра кола;
Color – колір кола.
Draw Move ChangeColor
Екземпляри класу
Властивості
об'єкта
методи
Батьківський клас
8. Кожен об'єкт має свій певний тип (клас), що
об'єднає в собі наступні елементи:
Властивості – певні параметри і
характеристики об'єкту
Методи – дії, що можна виконувати над даним
об'єктом, чи які може виконувати він сам
Події – повідомлення що виникають при зміні
стану об'єкта
9. структурована змінна, що містить в собі всю
інформацію про деякий фізичний предмет або
сутність, що реалізується в програмі
структурована змінна, що містить в собі всю
інформацію про деякий фізичний предмет або
сутність, що реалізується в програмі
ВластивостіВластивості МетодиМетоди
ОБ'ЄКТ
Параметри об'єкта Процидури та функції, що
виконуються об'єктом
ІнкапсуляціяІнкапсуляція
10. Інкапсуляція – це властивість об'єкта мати
спеціальний інтерфейс (певний метод), через
який і здійснюється взаємодія зовнішнього
середовища з внутрішніми методами класу.
При чому зовнішнє середовище може і не
підозрювати про структуру і логіку внутрішніх
методів.
12. Малювати, Переміщати, Змінювати світло
RoundRound RectRect
RR - Радіус - Довжина- Радіус - Довжина
X,YX,Y - Координати Центра – Вершини- Координати Центра – Вершини
13. Наслідування – це можливість породжувати
один клас від іншого, при чому всі методи і
властивості батьківського класу передаються
дочірньому, дочірній клас в свою чергу може
набувати нових методів і властивостей, яких не
було в батьківському і також передавати їх в
похідні від себе класи.
15. Поліморфізм – це можливість дочірнього
класу змінювати реалізацію тих чи інших дій
батьківського класу.
16. Синтаксис
<?php
class Circle
{
public $radius = 15
private $color = “red”;
public function Draw($radius, $color) {
}
}
//best practice
$rectangle = new Rectangle();
$rectangle->Draw(55, “blue”);
?>
17. Області видимості методів і
властивостей класів.
• public – доступний без обмежень
• protected – тільки в середині класу, в
якому вони оголошені і похідних від нього
класах
• private – тільки в середині класу, в якому
вони оголошені
18. <?php
// оголошуємо основний клас
class Figure {
private $privateName = 'Private Name';
protected $protectedName =
'Protected Name';
public $publicName = 'Public Name';
private function PrivateFunction() {
echo 'PrivateFunction()';
}
protected function ProtectedFunction()
{
echo 'ProtectedFunction()';
}
public function PublicFunction() {
echo 'PublicFunction()';
}
public function GetPrivate() {
echo $this->privateName;
}
public function GetProtected() {
echo $this->protectedName;
}
// оголошуємо похідний клас від SomeClass
class Circle extends Figure {
public function GetPrivateFromParent() {
echo $this->privateName;
}
}
19. Статичні властивості і методи
класу
• Є ще також статичні (static) методи і
властивості. Їхньою особливістю є те, що
вони не належать певному об'єктові, вони
єдині для цілого класу, і можуть
викликатися без створення об'єкту. Зміна
статичної властивості в одному з об'єктів
класу призводить до його зміни для всіх
об'єктів цього класу.
20. Приклад:
<?php
// оголошуємо основний клас
class SomeClass{
static $staticVar = 'Static Variable';
static function StaticFunction() {
echo 'StaticFunction()';
}
}
echo SomeClass::StaticFunction(); // Виводить StaticFunction()
echo SomeClass::$staticVar; // Виводить Static Variable
?>
22. Конструктори и деструктори.
• Конструктор (__construct()) і деструктор
(__destruct()) це методи що викликаються
автоматично при створенні і знищенні
об'єкту відповідно:
23. <?php
class SomeClass{
function __construct() {
echo 'Create object';
}
function __destruct() {
echo 'Destroy object';
}
}
$someObj = new SomeClass; // Виводиться Create object
unset($someObj); // Виводиться Destroy object
?>
24. Абстрактні методи і класи.
Абстрактні (abstract) методи і класи тільки
оголошуються, клас який містить абстрактні
методи повинен оголоситися як
абстрактний. На основі абстрактного класу
можна тільки створювати інші класи, а вже
від них об'єкти. Абстрактний клас може
містити і звичайні (не абстрактні) елементи.
25. Приклад:
<?php
abstract class SomeAbstractClass {
// оголошення абстрактної функції
abstract public function abstractFunction();
// оголошення неабстрактної функції
public function GeneralFunction() {
}
}
class SomeClass extends SomeAbstractClass {
// перевантаження абстрактного методу
public function abstractFunction() {
echo 'abstractFunction()';
}
}
$someObj = new SomeAbstractClass; // Помилка створення об'єкта
$someObj1 = new SomeClass;
$someObj1->abstrFunc(); // Виводить 'abstractFunction()'
?>
26. Інтерфейси.
Інтерфейс – це фактично абстрактний клас,
який містить тільки абстрактні методи і не
містить ніяких властивостей.
Оголошуються інтерфейси з використанням
ключового слова interface, а всі функції
оголошуються стандартно, з використанням
ключового слова function.
27. Приклад:
<?php
// оголошення інтерфейсів
interface InterfaceOne {
function SomeFunctionOne();
}
interface InterfaceTwo {
function SomeFunctionTwo();
}
// оголошення класу на основі інтерфейсів
class SomeClass implements InterfaceOne, InterfaceTwo {
public function SomeFunctionOne() {
echo 'SomeFunctionOne()';
}
public function SomeFunctionTwo() {
echo 'SomeFunctionTwo()';
}
}
$object = new SomeClass;
$object->SomeFunctionOne(); // Виводить 'SomeFunctionOne()'
$object->SomeFunctionTwo(); // Виводить 'SomeFunctionTwo()'
?>
29. <?php
try {
// відкриваємо файл для читання
$fp = @fopen("somefile.txt", "r");
// якщо файл відсутній, створюємо виключення
if (!$someFile)
throw new Exception(" Помилка відкриття файлу!");
fclose($someFile);
} catch (Exception $exception) {
// метод $exception->getLine() повертає номер рядка даного скрипта,
в якому виникла помилка
echo "Помилка в стрічці ", $exception->getLine();
echo $exception->getMessage(); // Выводит "Помилка відкриття файлу!"
}
?>
30. Перевантаження доступу до
властивостей об'єкту.
Методи доступу __get() і __set() дозволяють
динамічно визначати властивості об'єктів.
__get() в якості параметра отримує ім'я
властивості, а __set() окрім імені ще і нове
значення властивості, яке відповідно і
присвоює.
31. <?php
class SomeClass {
private $classPropertys;
function __set($name, $value) {
echo "__set: присвоювання властивості $name = $value";
$this->classPropertys[$name]=$value;
}
function __get($name) {
echo "__get: читання властивості $name: ";
echo $this->classPropertys[$name];
}
}
$obj = new SomeClass;
$obj->name = 'New Value'; // Виводить "__set: присвоювання властивості name=New Value"
$value = $obj->name; // Виводить "__get: читання властивості name: New Value"
?>
32. Перевантаження викликів
методів класу.
Якщо метод __call() описаний в певному класі,
тоді він автоматично переловлює виклики
до неіснуючих методів цього класу. В якості
параметрів він отримує ім'я і параметри
методу що викликається.
33. <?php
class SomeClass {
function __call($name, $params) {
echo "Помилка: викликано неіснуючий метод $name з
параметром[ами]: ";
foreach($params as $val) {
echo $val.' | ';
}
}
}
$obj = new SomeClass;
$obj->WrongMethodOne(1, 2, 'param'); // Виводить: 'Помилка: викликано неіснуючий
метод WrongMethodOne з параметром[ами]: 1 | 2 | param |'
$obj->WrongMethodTwo(123); // Виводить: 'Помилка: викликано неіснуючий метод
WrongMethodOne з параметром[ами]: 123 |'
?>
34. Уточнення типу (type-hint)
PHP 5 надає можливість використовувати контроль
типів. На даний момент функції мають можливість
змушувати параметри бути або об'єктами (шляхом
зазначення імені класу в прототипі функції), або
інтерфейсами, або масивами (починаючи з PHP 5.1),
або колбек з типом callable (починаючи з PHP 5.4).
Якщо клас або інтерфейс вказано для контролю типу,
то всі його нащадки або реалізації також допустимі.
35. <?php
class MyClass
{
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}
public function test_array(array $input_array) {
print_r($input_array);
}
public function test_interface(Traversable $iterator) {
echo get_class($iterator);
}
public function test_callable(callable $callback, $data) {
call_user_func($callback, $data);
}
}
// Другой тестовый класс
class OtherClass {
public $var = 'Hello World';
}
?>