it-blog.club
Инкапсуляция и спецификаторы доступа в PHP

Инкапсуляция и спецификаторы доступа в PHP

Конечно я сейчас не открою Америку и прекрасно знаю, что уже есть 1000и статей на тему инкапсуляции, но я просто не хочу сидеть в тени и тоже блеснуть знаниями.

Карачи!

Если говорить научным языком, то Инкапсуляция - это сокрытие реализации того или иного класса. Собственно я сейчас не сказал ничего нового, и, порой так где это уже написано, на этом всё и заканчивается.

Какое сокрытие? Сокрытие чего? Что такое сокрытие? Ни чё не понятно!

Карач. Правильнее сказать закрытие всего рабочего механизма класса в некую "капсулу". Т.е. написание класса таким образом, чтобы будущему разработчику, использующему ваш класс, не пришлось заглядывать в его реализацию.

Отличным примером Инкапсуляции является большинство модулей и библиотек. Например PHPExcel.

Вы просто качаете архив. Распаковываете на проекте. Подключаете основной файл и поехали. Максимум вызываем пару методов, передавая необходимые параметры. А что там дальше происходит? Как это работает? Нас не интересует.

1437835730146588966.jpg

Ну это если прям по умному сказать.

Если приводить простой пример, то можете представить монитор. Вот есть у вас компуктер. Вы купили монитор, подключили его через доступный интерфейс и стали пользоваться, а как он работает, да и ладно. Работает же.

Но тут же нам с вами нужно познакомиться с спецификаторами классов.

Такими как public, protected, private

cNDkHejVxwc.jpg

спецификаторы необходимо использовать при объявлении функций и членов класса.

Например:


class cl {
    private $a = 1;
    public function b() {
        return $this->a;
    }
}

public используется если вы пишите метод или член который будет возможно использовать в других местах вашей программы.

protected доступен только внутри текущего класса и его наследников!

private по логике ясно. Доступно только в текущем классе.

Не смотря на то, что private юзается онли ин вис класс доступ к нему можно получить, но не желательно!


class cl {
    private $a = 1;
    public function get() {
        return $this->a;
    }
}
$class = new cl;
echo $class->get();

На экране появится "1" не смотря на то, что $a это private. Так же мы можем поменять её значение.


class cl {
    private $a = 1;
    public function get() {
        return $this->a;
    }
    public function set($x) {
        $this->a = $x;
    }
}
$class = new cl;
$class->set(2);
echo $class->get();

После выпонения увидим "2".

P.S.

Кстати, если просто написать function asd(){***} не указывая спецификаторы 


В общем. Следующая статья будет о том, что будет если дампнуть объект. Ахаха. Ты можешь сказать, что просто выведутся все его члены. Но что же будет если мы зададим каждому разный спецификатор, включая private.

Ставь ОГОНЬ. Подписывайся на группу в ВК, YouTube канал и на обновления блога)


it-blog.club 204
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать