Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий зтими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик". Когда коды и данные объединяются таким способом, создаётся объект (object). Другими словами, объект - это то, что поддерживает инкапсуляцию.

Внутри объекта коды и данные могут быть закрытыми (private). Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы. Характерной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интерфейс закрытых элементов объекта.

На самом деле объект является переменной определённого пользователем типа. Может показаться странным, что объект, который объединяет коды и данные, можно рассматривать как переменную. Однако применительно к объектно-ориентированному программированию это именно так. Каждый элемент данных такого типа является составной переменной.

Приведу небольшой пример к вышесказанному:

PHP поддерживает атрибуты управления доступом к членам класса:
public - открытый доступ, члены класса доступны из любой точки программы (по умолчанию);
protected - защищенный доступ, члены класса доступны внутри класса и его потомках;
private - закрытый (частный) доступ, члены класса доступны только внутри класса.

Код:
class A {
    public $var1 = 'public';
    protected $var2 = 'protected';
    private $var3 = 'private';

    // тоже паблик
    function anymethod() { 
    ...
    }
}

class B extends A {
    echo $this->var1; // выведет строку 'public'
    echo $this->var2; // выведет строку 'protected'
    echo $this->var3; // выдаст ошибку.
}

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