пример инкапсуляции в php
Инкапсуляция в PHP
Свойства объектов
Вернёмся к нашей прошлой теме. Те, кто видел котиков, знают, что некоторые признаки у котиков отличаются: цвет, вес, громкость мяуканья и т.д. Такие признаки есть у всех объектов, в том числе и в наших. И в ООП они называются свойствами объектов. Давайте приведем примеры таких свойств для котиков:
Давайте теперь создадим более похожий на реального котика класс:
Итак, мы сделали некоторый шаблон, который вполне себе описывает котиков. Давайте теперь создадим новый объект этого класса.
Так мы создали объект с типом Cat и вывели его с помощью var_dump().
Как видим, это уже не ерунда какая-то, а белый Снежок, который весит три с половиной кило.
Теперь мы можем обратиться к свойству этого кота и узнать его имя.
И получим в результате «Снежок».
Можем создать несколько котов и задать им разные свойства:
Результат получится вполне ожидаемый:
Два разных объекта со своими значениями свойств.
Это довольно похоже на работу с массивами, как будто записываем значение по ключу.
Методы объектов
Методы объявляются следующим образом:
Как мы видим, в целом методы объектов не сильно отличаются от обычных функций. При их описании мы только добавляем модификатор доступа.
Вызвать метод мы можем у созданного объекта. Давайте создадим нового кота и попросим его с нами поздороваться. Для вызова метода объекта используется такой же оператор как и для доступа к свойствам объекта ->
Этот код выведет строку ‘Мяу!’. Вот так вот, с нами поздоровался виртуальный кот!
На деле всё не так уж и сложно. Мы можем с помощью этой переменной обращаться к другим методам и свойствам данного объекта. Например, давайте научим кота здороваться по-человечески. Пусть он будет называть своё имя. Для этого нам нужно переписать метод sayHello() следующим образом:
Данный код выведет следующее:
Модификаторы доступа
Например, давайте изменим модификатор для свойства name:
Давайте теперь попытаемся изменить это свойство у объекта:
Однако, мы можем написать публичный метод, который позволит задать данное свойство с помощью него. Назовём его setName(). Он будет брать переданную в него строку и устанавливать это значение в свойство name.
Теперь давайте зададим имя коту с помощью этого метода:
Теперь всё успешно отработало, и кот даже сказал своё имя с помощью метода sayHello(). Однако если бы мы попытались просто вывести его имя вот так:
то мы бы снова получили ошибку доступа.
Чтобы получить напрямую значение приватного свойства у объекта можно написать другой публичный метод, который будет просто возвращать значение этого свойства. Напишем метод getName().
Теперь мы можем просто получить имя кота извне:
Такие методы, в свою очередь, именуются геттерами.
Конструктор
А теперь давайте возьмём и сломаем одного кота 🙂
Для этого мы не будем давать ему имя, и вызовем метод getName().
Ведь мы описали, что getName() всегда должна отдавать строку. А в нашем объекте возвращается null.
Метод-конструктор должен называться __construct. Именно так и никак иначе.
Конструктор принято объявлять в начале класса, после объявления свойств, но перед другими методами.
Теперь чтобы создать кота с именем Снежок мы должны передать аргумент при создании нового объекта:
И вот что сейчас произошло: аргумент, переданный в круглые скобки, был передан в метод __construct(). Там это значение установилось в свойство объекта name.
Если мы сейчас попробуем узнать имя этого кота, то мы его получим.
А давайте теперь мы попробуем по-старинке создать кота без имени, не передавая аргументов при создании объекта.
Здесь написано, что в конструкторе ожидается 1 обязательный аргумент, а мы не передали ни одного.
Инкапсуляция и спецификаторы доступа в PHP
Класс может использоваться без методов и членов, однако пользы в этом случае от него не больше, чем от переменной, которая не может хранить значения.
Как правило, классы содержат члены и методы. Часть из них будет использоваться внешним разработчиком, часть предназначена только для внутреннего использования в рамках самого класса. PHP пердоставляет специальные ключевые слова, позволяющие указать, какие члены и методы доступны извне, а какие нет.
Это позволяет реализовать принцип инкапсуляции.
У нас имеется класс «Ф.И.О» (fio), который содержит четыре члена:
Напомним, что переменные объявленные в классе, называются членами, а функции методами.
Как видно члены класса «fio» объявляются ключевым словом «public», которое является спецификатором доступа. Все члены и методы класса делятся на закрытые и открытые. Для открытых членов класса существует спецификатором доступа «public», сам член класса или метод будет доступен как внутри класса так и извне, а для того чтобы член или метод класса небыл доступен извне программы объявляется спецификатор «private». Существует ещё один спецификатор доступа «protected» (защищённый). Иногда удобно, чтобы член или метод базового класса, оставался закрытым для внешнего кода и был открыт для производного класса в этом случае прибегают именно к нему. Ниже продемонстрирован пример его использования.
Слова «public, protected, private», которые называются были введены в PHP 5, в более ранних версиях использовалось ключевое слово «var».
PHP | Инкапсуляция
В современном техническом мире поддержание конфиденциальности стало одной из самых жестких потребностей в защите важных данных. Всякий раз, когда данные, измененные в одной функции, влияют на другие функции, это вызывает много проблем в любом программном обеспечении. Чтобы преодолеть эту проблему, объектно-ориентированное программирование в PHP использует концепцию инкапсуляции.
Таким образом, концепция ООП «Инкапсуляция в PHP» означает включение внутренних деталей объекта для защиты от внешних источников. Он описывает, объединяя класс, переменные данных и функции-члены, которые работают над данными вместе в одном модуле, чтобы сформировать объект. В противном случае это объединение свойств и поведения в одну единицу класса.
К данным не обращаются напрямую, фактически они доступны через функции (GET или SET), написанные внутри класса. Атрибуты остаются закрытыми, но методы getter (GET) и setter (SET) остаются открытыми для манипулирования этими атрибутами.
Программа PHP для инкапсуляции: методы или функции в следующей программе обновляют пароль и проверяют название курса. Класс GFG определяет все операции, связанные с пользователями GFG.
// PHP программа для реализации инкапсуляции
// Обновляем пароль GFG
// Написать тело функции
echo ( «Function to update password ‘»
// Проверка баланса счета
// Написать тело функции
echo ( «Function to check course name of user «
Выход:
Примечание. Члены данных и свойства класса недоступны для внешнего конечного пользователя. Таким образом, они не могут изменить свойства.
Программа для доступа к переменным
public function getFirstName() <
public function getGender() <
echo ( ‘Set gender as Male or Female for gender’ );
$student = new Student();
Выход:
Замечания:
Преимущества инкапсуляции:
Примечание. Инкапсуляция используется для скрытия внутренних представлений от клиента.
Вывод: объектно-ориентированное программирование в PHP достигается с помощью концепции инкапсуляции, которая используется для сокрытия информации. Это уменьшает легкодоступность атрибутов данного класса. Методы получения и установки используются для предотвращения внешнего нежелательного доступа. Это также помогает в проверке новых значений, назначенных свойствам.
Короче говоря, инкапсуляция в PHP — это процесс сокрытия всех секретных деталей объекта, которые на самом деле не вносят большой вклад в критические характеристики класса.
Инкапсуляция — PHP: Введение в ООП
В общепринятом ООП есть один термин, которым любят пугать новичков. Имя ему — инкапсуляция.
В первой части этого курса мы строили абстракции, используя обычные функции с применением подхода data hiding.
В объектно-ориентированном подходе функции объединяются с данными и описываются вместе внутри класса (в классово-ориентированных языках). Инкапсуляция — механизм, позволяющий описывать данные и функции, оперирующие ими, в рамках одной языковой конструкции. В случае PHP такой конструкцией является класс.
Мы уже начали так делать, когда знакомились с конструктором. Такие функции принято именовать методами, так как они связаны с объектом, на котором вызываются. Визуально вызов метода выглядит как обращение к свойству и его вызов.
Сеттеры в примере выше показаны только для демонстрации. В реальном коде точка почти наверняка будет неизменяемым объектом.
Но геттеры и сеттеры — не единственные типы функций, которые позволяют описывать класс. В принципе, всё, что мы описывали, работая без классов, с таким же успехом описывается и с классами.
Реализация без классов:
Реализация в классе:
Данная операция обладает свойством коммутативности: результат вычисления не зависит от того, в каком порядке идут аргументы. Соответственно, при использовании методов, можно вызывать distanceTo как на одном объекте, так и на другом.
Нередко методы выполняют не только вычисления, но и возвращают новые объекты. Например, так произойдёт при вычислении симметричной точки.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Пример инкапсуляции в php
В последнее время идея объектно-ориентированного программирования (ООП), кардинально новая идеология написания программ, все более занимает умы программистов.
Объектно-ориентированные программы более просты и мобильны, их легче модифицировать и сопровождать, чем их «традиционных» собратьев. Кроме того, похоже, сама идея объектной ориентированности при грамотном ее использовании позволяет программе быть даже более защищенной от различного рода ошибок, чем это задумывал программист в момент работы над ней. Однако ничего не дается даром: сами
идеи ООП довольно трудны для восприятия «с нуля», поэтому до сих пор очень большое количество программ (различные системы Unix, Apache, Perl, да и сам PHP) все еще пишутся на старом добром «объектно-неориентированном» Си.
PHP до недавнего времени обеспечивал лишь некоторую поддержку ООП. Однако, после выхода PHP5 поддержка ООП в PHP стала практически полной.
Стратегию ООП лучше всего описать как смещение приоритетов в процессе программирования от функциональности приложения к структурам данных. Это позволяет программисту моделировать в создаваемых приложениях реальные объекты и ситуации. Технология ООП обладает тремя главными преимуществами:
Специфика ООП заметно повышает эффективность труда программистов и позволяет им создавать более мощные, масштабируемые и эффективные приложения.
Объектно-ориентированное программирование основано на:
Инкапсуляция
Многие преимущества ООП обусловлены одним из его фундаментальных принципов — инкапсуляцией. Инкапсуляцией называется включение различных мелких элементов в более крупный объект, в результате чего программист работает непосредственно с этим объектом. Это приводит к упрощению программы, поскольку из нее исключаются второстепенные детали.
Инкапсуляцию можно сравнить с работой автомобиля с точки зрения типичного водителя. Многие водители не разбираются в подробностях внутреннего устройства машины, но при этом управляют ею именно так, как было задумано. Пусть они не знают, как устроен двигатель, тормоз или рулевое управление, — существует специальный интерфейс, который автоматизирует и упрощает эти сложные операции. Сказанное также относится к инкапсуляции и ООП — многие подробности «внутреннего устройства» скрываются от пользователя, что позволяет ему сосредоточиться на решении конкретных задач. В ООП эта возможность обеспечивается классами, объектами и различными средствами выражения иерархических связей между ними.
Полиморфизм
Полиморфизм позволяет использовать одни и те же имена для похожих, но технически разных задач. Главным в полиморфизме является то, что он позволяет манипулировать объектами путем создания стандартных интерфейсов для схожих действий. Полиморфизм значительно облегчает написание сложных программ.
Наследование
Наследование позволяет одному объекту приобретать свойства другого объекта, не путайте с копированием объектов. При копировании создается точная копия объекта, а при наследовании точная копия дополняется уникальными свойствами, которые характерны только для производного объекта.