Столкнулся с тем, что до сих пор не знаю основных понятий ООП. Поэтому попробую разобраться.
Объектно-ориентированное программирование основано на следующих понятиях:
- Инкапсуляции;
- Полиморфизм;
- Наследовании.
Инкапсуляция — возможность использования объектов не зная как они работают внутри. (Т.е. можно ездить на авто и не знать устройства двигателя). Данное скрытие достигается использование следующих ключевых слов:
- public – методы и свойства доступны извне объекта
- private – закрытые методы могут быть вызваны только в классе, где они были объявлены ( к ним нельзя обратиться из производных классов).
- protected – защищённые методы могут вызываться только из того же класса или его производных классов.
Полиморфизм (многоформенность) — (возможность объектов с одинаковой спецификацией иметь различную реализацию) это способность обьекта использовать методы производного класса, который не существует на момент создания базового.
Данные возможности можно увидеть на следующем примере:
<?php
class A {
// Выводит, функция какого класса была вызвана
function Test() { echo "Test from A\n"; }
// Тестовая функция — просто переадресует на Test()
function Call() { Test(); }
}
class B extends A {
// Функция Test() для класса B
function Test() { echo "Test from B\n"; }
}
$a=new A();
$b=new B();
$a->Call(); // выводит "Test from A"
$b->Test(); // выводит "Test from B"
$b->Call(); // Внимание! Выводит "Test from B"!
?>
Подробнее тут: http://habrahabr.ru/blogs/php/37610/
Абстрактный класс (класс шаблон) — это класс который создается с помощью ключевого слова abstract, в нем реализовано только частичная функциональность, остальное дополняется в производных классах. (Нельзя создавать объекты данного класса.)
<?php
abstract class MyClass {
protected $data;
function __construct( $data ) {
$this->data = $data;
$this->testFunction( $condition_s );
}
/* делаем возможность получить protected-атрибут data */
public function getData() {
return $this->data;
}
abstract protected function testFunction( $condition_s );
abstract function Do( $response_s );
}
?>
Интерфейс – это абстрактный класс, который содержит только абстрактные методы и не имеет никаких свойств. Создается с помощью ключевого слова interface.
<?php
interface Inter1 {
function fn1();
}class MyClass implements Inter1 {
public function fn1() {
echo 1;
}
}
?>
Подробнее тут: http://phpclub.ru/detail/article/oop_classes
Наследование — позволяет описать новый класс на основании старого класса. Определяется с помощью ключевого слова extends.
<?
class Student {
}
class GraduateStudent extends Student {
}
?>
Инкапсуляция — возможность использования объектов не зная как они работают внутри.
Лучшее объяснение что я встречал ))